【发布时间】:2018-09-18 14:06:04
【问题描述】:
所以,基本要点是,我在 QWebEngine 中使用了像 https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js 这样的 JavaScript 资源。目的是,该程序也可以离线工作,所以我制作了一个 QWebEngineUrlRequestInterceptor ,将这些地址更改为我自己的本地处理程序,在这种情况下,目标是 conapp://webresource/jquery.min.js
但是,这会导致以下日志消息:
js: Redirect from
'https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js' has been
blocked by CORS policy: Redirect location
'conapp://webresource/jquery.min.js' has a disallowed scheme for cross-
origin requests.
有没有办法专门允许重定向到 conapp://?
一些相关的代码片段,如果有帮助的话 (PyQt5)
class Interceptor(QWebEngineUrlRequestInterceptor):
def __init__(self):
super(Interceptor, self).__init__()
QWebEngineProfile.defaultProfile().setRequestInterceptor(self)
def interceptRequest(self, info):
url = info.requestUrl().toString()
item = url.split("/")[-1]
if item in LazyLoader:
target = QUrl(r"conapp://webresource/{}".format(item))
info.redirect(target)
class SchemeHandler(QWebEngineUrlSchemeHandler):
def __init__(self):
super(SchemeHandler, self).__init__()
QWebEngineProfile.defaultProfile().settings().setAttribute(6, True)
QWebEngineProfile.defaultProfile().installUrlSchemeHandler(b'conapp', self)
self._handlers = {}
def requestStarted(self, job):
url = job.requestUrl()
print("Got request for {}".format(url.toDisplayString()))
request = url.toString().split("//")[1]
buf = QBuffer(parent=self)
buf.open(QIODevice.WriteOnly)
buf.write(self._handlers[request]().encode("utf-8"))
buf.seek(0)
buf.close()
job.reply(b"text/html", buf)
def register(self, contentgenerator, contentname):
self._handlers[contentname] = contentgenerator
return contentname
【问题讨论】:
-
不行,因为即使是在同一台机器上运行的其他应用程序也不允许访问。我现在已经实现了我自己的拦截 url 的方式——通过修改 html,这只是一种解决方法。
标签: python pyqt pyqt5 qwebengineview