Skip to content

Commit 3e67bb9

Browse files
committed
Provide an actually working implementation of the webbrowser mocked
package
1 parent 70f637a commit 3e67bb9

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

include/pyjs/pre_js/init.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@ def _add_resolve_done_callback(future, resolve, reject):
236236
import sys
237237
import types
238238
import time
239+
import pyjs
240+
from js import postMessage
239241
240242
sys.modules["fcntl"] = types.ModuleType("fcntl")
241243
sys.modules["pexpect"] = types.ModuleType("pexpect")
@@ -262,17 +264,39 @@ _mock_termios()
262264
del _mock_termios
263265
264266
def _mock_webbrowser():
267+
webbrowser_mock = types.ModuleType("webbrowser")
268+
269+
def get():
270+
webbrowser_mock
271+
265272
def open(url, new=0, autoraise=True):
266-
pass
273+
try:
274+
from js import window
275+
276+
window.open(url)
277+
except ImportError:
278+
# Assuming we're in a web worker
279+
# This is sent to the main thread, which will do the window.open
280+
obj = pyjs.js.Function("url","n",
281+
"""
282+
return {'OPEN_TAB':{'url': url, 'new': n}}
283+
"""
284+
)(url, new)
285+
postMessage(obj)
286+
267287
def open_new(url):
268288
return open(url, 1)
289+
269290
def open_new_tab(url):
270291
return open(url, 2)
271292
272-
webbrowser_mock = types.ModuleType("webbrowser")
293+
# We cannot detect the current browser name from a web worker, we just pretend it's Firefox
294+
webbrowser_mock.name = "firefox"
295+
webbrowser_mock.get = get
273296
webbrowser_mock.open = open
274297
webbrowser_mock.open_new = open_new
275298
webbrowser_mock.open_new_tab = open_new_tab
299+
webbrowser_mock.Error = RuntimeError
276300
277301
sys.modules["webbrowser"] = webbrowser_mock
278302
_mock_webbrowser()

0 commit comments

Comments
 (0)