@@ -4,7 +4,7 @@ Module._is_initialized = false
44
55Module [ 'init_phase_1' ] = async function ( prefix , python_version , verbose ) {
66
7- if ( verbose ) { console . log ( "in init phase 1" ) ; }
7+ if ( verbose ) { console . log ( "in init phase 1" ) ; }
88 let version_str = `${ python_version [ 0 ] } .${ python_version [ 1 ] } ` ;
99
1010 // list of python objects we need to delete when cleaning up
@@ -32,7 +32,7 @@ Module['init_phase_1'] = async function(prefix, python_version, verbose) {
3232
3333
3434 Module . create_directories ( side_path ) ;
35-
35+
3636
3737 Module [ "_interpreter" ] = new Module [ "_Interpreter" ] ( )
3838 var default_scope = Module [ "main_scope" ] ( )
@@ -134,7 +134,7 @@ Module['init_phase_1'] = async function(prefix, python_version, verbose) {
134134 return ret [ 'ret' ]
135135 }
136136 } ;
137- if ( verbose ) { console . log ( "in init phase 2 done" ) ; }
137+ if ( verbose ) { console . log ( "in init phase 2 done" ) ; }
138138}
139139
140140Module [ 'init_phase_2' ] = function ( prefix , python_version , verbose ) {
@@ -231,17 +231,43 @@ _mock_termios()
231231del _mock_termios
232232
233233def _mock_webbrowser():
234+ webbrowser_mock = types.ModuleType("webbrowser")
235+
236+ def get():
237+ webbrowser_mock
238+
234239 def open(url, new=0, autoraise=True):
235- pass
240+ import pyjs
241+ is_main_thread = pyjs.js.Function("""return typeof WorkerGlobalScope === "undefined" || !(self instanceof WorkerGlobalScope);""")()
242+ if is_main_thread:
243+ pyjs.js.window.open(url)
244+ else:
245+ # we're in a web worker
246+ # This is sent to the main thread, which will do the window.open if implemented
247+ obj = pyjs.js.Function("url","n",
248+ """
249+ return {'OPEN_TAB':{'url': url, 'new': n}}
250+ """
251+ )(url, new)
252+ pyjs.js.postMessage(obj)
253+
236254 def open_new(url):
237255 return open(url, 1)
256+
238257 def open_new_tab(url):
239258 return open(url, 2)
240259
241- webbrowser_mock = types.ModuleType("webbrowser")
260+ webbrowser_mock.name = pyjs.js.Function("""
261+ return /firefox/i.test(navigator.userAgent) ? "firefox"
262+ : /edg/i.test(navigator.userAgent) ? "edge"
263+ : /chrome|crios/i.test(navigator.userAgent) ? "chrome"
264+ : /safari/i.test(navigator.userAgent) ? "safari"
265+ : "Unknown";""")()
266+ webbrowser_mock.get = get
242267 webbrowser_mock.open = open
243268 webbrowser_mock.open_new = open_new
244269 webbrowser_mock.open_new_tab = open_new_tab
270+ webbrowser_mock.Error = RuntimeError
245271
246272 sys.modules["webbrowser"] = webbrowser_mock
247273_mock_webbrowser()
0 commit comments