def setup_content_manager(self): # Inject styles and functions content_manager = self.webview.get_user_content_manager() # with open('normalize.css', 'r') as style: # content_manager.add_style_sheet(WebKit2.UserStyleSheet(style.read( # ), injected_frames=WebKit2.UserContentInjectedFrames.ALL_FRAMES, level=WebKit2.UserStyleLevel.USER)) with open('style.css', 'r') as style: content_manager.add_style_sheet( WebKit2.UserStyleSheet(style.read(), injected_frames=WebKit2. UserContentInjectedFrames.ALL_FRAMES, level=WebKit2.UserStyleLevel.USER)) with open('functions.js', 'r') as functions: content_manager.add_script( WebKit2.UserScript( source=functions.read(), injected_frames=WebKit2.UserContentInjectedFrames. ALL_FRAMES, injection_time=WebKit2.UserScriptInjectionTime.END)) # Callback function for links (overriding html links) content_manager.register_script_message_handler('signal') content_manager.connect('script-message-received::signal', link_receiver)
def _user_content_manager(self): mgr = WebKit2.UserContentManager() script = WebKit2.UserScript( "Notification.requestPermission();", WebKit2.UserContentInjectedFrames.TOP_FRAME, WebKit2.UserScriptInjectionTime.START, None, None) mgr.add_script(script) return mgr
def inject_custom_scripts(self): script = open(self.file_path('scripts/webview.js'), 'r').read() frame = WebKit2.UserContentInjectedFrames.ALL_FRAMES time = WebKit2.UserScriptInjectionTime.END script = WebKit2.UserScript(script, frame, time, None, None) self.manager.add_script(script) self.manager.connect('script-message-received::desktop', self.on_script_message) self.manager.register_script_message_handler('desktop')
def __init__(self, **kwargs): cm = WebKit2.UserContentManager() cm.register_script_message_handler('scrolled'); cm.connect('script-message-received::scrolled', lambda cm, result: self.emit('scrolled', result.get_js_value().to_double())) cm.register_script_message_handler('scrolled_top'); cm.connect('script-message-received::scrolled_top', lambda cm, result: self.emit('scrolled-top')) cm.register_script_message_handler('scrolled_bottom'); cm.connect('script-message-received::scrolled_bottom', lambda cm, result: self.emit('scrolled-bottom')) cm.register_script_message_handler('selection_changed'); cm.connect('script-message-received::selection_changed', lambda cm, result: self.emit('selection-changed', result.get_js_value().to_boolean())) cm.add_script(WebKit2.UserScript(''' window.addEventListener("scroll", function(){ var handler = window.webkit.messageHandlers.scrolled; handler.postMessage(window.scrollY); }); document.addEventListener("selectionchange", function() { var handler = window.webkit.messageHandlers.selection_changed; handler.postMessage(window.getSelection() != ''); }); ''', WebKit2.UserContentInjectedFrames.ALL_FRAMES, WebKit2.UserScriptInjectionTime.START, None, None)) cm.add_style_sheet(WebKit2.UserStyleSheet(''' html { margin: 50px; } body { overflow: hidden; } ''', WebKit2.UserContentInjectedFrames.ALL_FRAMES, WebKit2.UserStyleLevel.USER, None, None)) WebKit2.WebView.__init__(self, user_content_manager=cm, **kwargs) self.get_settings().set_enable_write_console_messages_to_stdout(True)
def load_assets(self): """ Injects css and js files into the webview """ assets_path = os.path.join(os.path.dirname(__file__), '..', 'assets') with open(os.path.join(assets_path, 'css', 'markdown.css'), encoding='utf-8') as f: style_contents = f.read() with open(os.path.join(assets_path, 'js', 'hljs.js'), encoding='utf-8') as f: hljs_script = f.read() style = WebKit.UserStyleSheet( style_contents, WebKit.UserContentInjectedFrames.TOP_FRAME, WebKit.UserStyleLevel.USER, None, None) script = WebKit.UserScript(hljs_script, WebKit.UserContentInjectedFrames.TOP_FRAME, WebKit.UserScriptInjectionTime.END, None, None) self.webview.get_user_content_manager().add_style_sheet(style) self.webview.get_user_content_manager().add_script(script)