因此,基本要点是,我在 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