我正在将我的应用程序从 WebKit 移植到 WebEngine(似乎它更适合呈现 angular-basad html)。我遇到了无法启用 QtWebEngine 加载本地 iframe 的问题,尽管我已经设置了我发现的所有可能的设置:
mainwindow.cpp 中的代码
view->page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
view->page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);
view->page()->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
view->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
view->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);
view->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
Run Code Online (Sandbox Code Playgroud)
最简单的例子是采用基于 WebEngine 的 FancyBrowser (\Examples\Qt-5.4\webenginewidgets\fancybrowser) 并尝试在其中加载本地 html 文件,如下所示:
索引.html:
<html>
<head>
<title>Hi there</title>
</head>
<body>
This is a page
a simple page
<iframe id="some_idrame" width="0" height="0" style="border: none" src="some_iframe.html" name="target" sandbox="allow-scripts"></iframe>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
some_iframe.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>La-la-la</title>
</head>
<body>
Lalala
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如果您将 env var QTWEBENGINE_REMOTE_DEBUGGING 设置为某个端口,那么您可以打开 127.0.0.1:port 并在控制台中看到此错误:
"Not allowed …Run Code Online (Sandbox Code Playgroud)