Beispiel #1
0
    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)
Beispiel #2
0
 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')
Beispiel #4
0
    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)
Beispiel #5
0
    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)