Tue, 13 Feb 2018 19:51:20 +0100
JavaScriptIcon: Made it work with per page settings and override settings on internal schemes.
WebBrowser/StatusBar/JavaScriptIcon.py | file | annotate | diff | comparison | revisions |
--- 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)