WebBrowser/StatusBar/JavaScriptIcon.py

changeset 6144
00c723b11d4d
parent 6136
dfef226f9c7f
child 6149
e611e45a17d6
--- a/WebBrowser/StatusBar/JavaScriptIcon.py	Tue Feb 13 19:50:09 2018 +0100
+++ b/WebBrowser/StatusBar/JavaScriptIcon.py	Tue Feb 13 19:51:20 2018 +0100
@@ -41,6 +41,8 @@
         self.__icon = UI.PixmapCache.getPixmap("fileJavascript").scaled(16, 16)
         self.setPixmap(self.__icon)
         
+        self.__settings = {}
+        
         self._window.tabWidget().currentChanged.connect(self.__updateIcon)
         self._window.tabWidget().currentUrlChanged.connect(self.__updateIcon)
         self.clicked.connect(self.__showMenu)
@@ -103,7 +105,8 @@
         """
         Private slot to toggle the JavaScript setting.
         """
-        if self._currentPage() is None:
+        page = self._currentPage()
+        if page is None:
             return
         
         current = self._testCurrentPageWebAttribute(
@@ -111,6 +114,10 @@
         self._setCurrentPageWebAttribute(QWebEngineSettings.JavascriptEnabled,
                                          not current)
         
+        self.__settings[page] = not current
+        page.navigationRequestAccepted.connect(
+            lambda u, t, mf: self.__navigationRequestAccepted(u, t, mf, page))
+        
         self._window.currentBrowser().reload()
         
         self.__updateIcon()
@@ -127,3 +134,26 @@
         dlg = JavaScriptSettingsDialog(self._window)
         if dlg.exec_() == QDialog.Accepted:
             self._window.preferencesChanged()
+    
+    def __navigationRequestAccepted(self, url, navigationType, isMainFrame,
+                                    page):
+        """
+        Private method to handle the navigationRequestAccepted signal.
+        
+        @param url URL being loaded
+        @type QUrl
+        @param navigationType type of navigation request
+        @type QWebEnginePage.NavigationType
+        @param isMainFrame flag indicating a navigation request of the
+            main frame
+        @type bool
+        @param page reference to the web page
+        @type WebBrowserPage
+        """
+        if url.scheme() in ("eric", "qthelp"):
+            enable = True
+        else:
+            enable = self.__settings[page]
+        if isMainFrame:
+            page.settings().setAttribute(QWebEngineSettings.JavascriptEnabled,
+                enable)

eric ide

mercurial