eric6/WebBrowser/WebInspector.py

changeset 7945
76daafe10009
parent 7923
91e843545d9a
child 8143
2c730d5fd177
equal deleted inserted replaced
7941:cf988a30ba47 7945:76daafe10009
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 """

eric ide

mercurial