Jab*_*abu 5 javascript c++ qt chromium qwebengineview
我正在使用以下命令在 C++ 应用程序中嵌入不和谐小部件QWebEngineView我正在使用;小部件工作一切正常,问题在于登录。
我可以从小部件登录我的不和谐帐户,但在登录窗口关闭并返回小部件后,我在控制台上收到以下错误:
js: Error with Permissions-Policy header: Origin trial controlled feature not enabled: 'interest-cohort'.
js: Unrecognized Content-Security-Policy directive 'prefetch-src'.
js: Uncaught (in promise) function(){}
js: Unrecognized Content-Security-Policy directive 'prefetch-src'.
js: Unrecognized Content-Security-Policy directive 'prefetch-src'.
js: Uncaught (in promise) Error: Cannot find module './notosans-400-normalitalic.woff2'
js: Unrecognized Content-Security-Policy directive 'prefetch-src'.
js: Unrecognized Content-Security-Policy directive 'prefetch-src'.
js: Uncaught (in promise) #<Object>
js: [DEPRECATED] Please use `subscribeWithSelector` middleware
js: Window state not initialized window-1
js: Window state not initialized window-1
js: Window state not initialized window-1
js: Uncaught TypeError: Cannot read properties of null (reading 'postMessage')
Run Code Online (Sandbox Code Playgroud)
可重现的例子:
class WebEnginePage : public QWebEnginePage
{
Q_OBJECT
public:
WebEnginePage(QObject* parent = nullptr) : QWebEnginePage(parent) {}
QWebEnginePage* createWindow(QWebEnginePage::WebWindowType type) override
{
QWebEnginePage* page = new QWebEnginePage(this);
// To make the page be opened in the same window.
connect(page, &QWebEnginePage::urlChanged, this, [=]
{
setUrl(page->url());
page->deleteLater();
});
return page;
}
};
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QWebEngineView* view = new QWebEngineView;
WebEnginePage* page = new WebEnginePage(view);
page->setUrl(QUrl("qrc:/test.html"));
view->setPage(page);
view->setMinimumSize(800, 600);
view->show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我还尝试在页面配置文件中安装url 请求拦截器,并添加错误日志“interest-cohort”中看到的策略标头,但我继续收到错误:
RequestsInterceptor* requestsInterceptor = new RequestsInterceptor;
page->profile->setUrlRequestInterceptor(requestsInterceptor);
class RequestsInterceptor : public QWebEngineUrlRequestInterceptor
{
Q_OBJECT
public:
virtual void interceptRequest(QWebEngineUrlRequestInfo& info) override
{
info.setHttpHeader("Permissions-Policy", "interest-cohort=()");
info.setHttpHeader("Access-Control-Allow-Origin", "*");
//qDebug() << info.firstPartyUrl();
//qDebug() << info.navigationType();
//if (info.firstPartyUrl().toString().contains("https://s-e.widgetbot.io/api/auth/discord/cb"))
// info.setHttpHeader("Access-Control-Allow-Origin", "*");
}
};
Run Code Online (Sandbox Code Playgroud)
我一直在搜索错误Cannot read properties of null (reading 'postMessage')
并发现了这个问题,我很困惑如果问题是在Javascript方面,侧面widget还是在QWebEngine's上。
在浏览器上测试时,该小部件工作正常,我可以登录:
class WebEnginePage : public QWebEnginePage
{
Q_OBJECT
public:
WebEnginePage(QObject* parent = nullptr) : QWebEnginePage(parent) {}
QWebEnginePage* createWindow(QWebEnginePage::WebWindowType type) override
{
QWebEnginePage* page = new QWebEnginePage(this);
// To make the page be opened in the same window.
connect(page, &QWebEnginePage::urlChanged, this, [=]
{
setUrl(page->url());
page->deleteLater();
});
return page;
}
};
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QWebEngineView* view = new QWebEngineView;
WebEnginePage* page = new WebEnginePage(view);
page->setUrl(QUrl("qrc:/test.html"));
view->setPage(page);
view->setMinimumSize(800, 600);
view->show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
在代码片段中,当我尝试登录时,Stack Overflow 沙箱阻止对本地存储的访问,并且失败。
这是另一个工作选项: https: //jsfiddle.net/wdzgo31y/
小智 0
该错误似乎来自 JS。可能不是来自您的代码,而是来自不和谐的 SDK/包。
这postMessage是一个浏览器 API,用于将登录结果发送回主窗口。如果您从进程中调用discord登录将会遇到此问题。这就是您在浏览器中没有收到此错误的原因。
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |