5 |
5 |
6 """ |
6 """ |
7 Module implementing a QWebEngineView to load the web inspector in. |
7 Module implementing a QWebEngineView to load the web inspector in. |
8 """ |
8 """ |
9 |
9 |
10 import json |
10 from PyQt5.QtCore import pyqtSignal, QSize |
11 import os |
|
12 |
|
13 from PyQt5.QtCore import pyqtSignal, QSize, QUrl |
|
14 from PyQt5.QtNetwork import QNetworkRequest |
|
15 from PyQt5.QtWebEngineWidgets import ( |
11 from PyQt5.QtWebEngineWidgets import ( |
16 QWebEngineView, QWebEnginePage, QWebEngineSettings |
12 QWebEngineView, QWebEnginePage, QWebEngineSettings |
17 ) |
13 ) |
18 |
|
19 from Globals import qVersionTuple |
|
20 |
14 |
21 import Preferences |
15 import Preferences |
22 |
16 |
23 _VIEWS = [] |
17 _VIEWS = [] |
24 |
18 |
88 if not self.isEnabled(): |
82 if not self.isEnabled(): |
89 return |
83 return |
90 |
84 |
91 self.__inspectElement = inspectElement |
85 self.__inspectElement = inspectElement |
92 |
86 |
93 try: |
87 self.page().setInspectedPage(self.__view.page()) |
94 self.page().setInspectedPage(self.__view.page()) |
|
95 except AttributeError: |
|
96 # pre Qt 5.11 |
|
97 port = Preferences.getWebBrowser("WebInspectorPort") |
|
98 inspectorUrl = QUrl("http://localhost:{0}".format(port)) |
|
99 |
|
100 from WebBrowser.WebBrowserWindow import WebBrowserWindow |
|
101 self.__reply = WebBrowserWindow.networkManager().get( |
|
102 QNetworkRequest(inspectorUrl.resolved(QUrl("json/list")))) |
|
103 self.__reply.finished.connect(self.__inspectorReplyFinished) |
|
104 |
|
105 def __inspectorReplyFinished(self): |
|
106 """ |
|
107 Private slot handling the reply. |
|
108 """ |
|
109 # used for pre Qt 5.11 |
|
110 result = str(self.__reply.readAll(), encoding="utf8") |
|
111 |
|
112 self.__reply.deleteLater() |
|
113 self.__reply = None |
|
114 |
|
115 pageUrl = QUrl() |
|
116 try: |
|
117 index = _VIEWS.index(self.__view) |
|
118 except ValueError: |
|
119 index = -1 |
|
120 try: |
|
121 clients = json.loads(result) |
|
122 if len(clients) > index: |
|
123 port = Preferences.getWebBrowser("WebInspectorPort") |
|
124 inspectorUrl = QUrl("http://localhost:{0}".format(port)) |
|
125 |
|
126 client = clients[index] |
|
127 pageUrl = inspectorUrl.resolved( |
|
128 QUrl(client["devtoolsFrontendUrl"])) |
|
129 self.load(pageUrl) |
|
130 pushView(self) |
|
131 self.show() |
|
132 except json.JSONDecodeError: |
|
133 # ignore silently |
|
134 pass |
|
135 |
88 |
136 def inspectElement(self): |
89 def inspectElement(self): |
137 """ |
90 """ |
138 Public method to inspect an element. |
91 Public method to inspect an element. |
139 """ |
92 """ |
145 Class method to check, if the web inspector is enabled. |
98 Class method to check, if the web inspector is enabled. |
146 |
99 |
147 @return flag indicating the enabled state |
100 @return flag indicating the enabled state |
148 @rtype bool |
101 @rtype bool |
149 """ |
102 """ |
150 if qVersionTuple() < (5, 11, 0): |
|
151 if not os.getenv("QTWEBENGINE_REMOTE_DEBUGGING"): |
|
152 return False |
|
153 |
|
154 from WebBrowser.WebBrowserWindow import WebBrowserWindow |
103 from WebBrowser.WebBrowserWindow import WebBrowserWindow |
155 if not WebBrowserWindow.webSettings().testAttribute( |
104 if not WebBrowserWindow.webSettings().testAttribute( |
156 QWebEngineSettings.JavascriptEnabled): |
105 QWebEngineSettings.JavascriptEnabled): |
157 return False |
106 return False |
158 |
107 |
159 if qVersionTuple() < (5, 11, 0): |
108 return True |
160 return Preferences.getWebBrowser("WebInspectorEnabled") |
|
161 else: |
|
162 return True |
|
163 |
109 |
164 def __loadFinished(self): |
110 def __loadFinished(self): |
165 """ |
111 """ |
166 Private slot handling the finished signal. |
112 Private slot handling the finished signal. |
167 """ |
113 """ |