WKWebView 不触发方法 createWebViewWithConfiguration
WKWebView does not trigger method createWebViewWithConfiguration
我正在尝试 运行 Javascript 在 HTML 源中。里面的代码假设用我给出的另一个 HTML 来源打开一个新的 window。我的错误是什么?
(我的目标 是为了证明 WKWebView 有打开嵌套弹窗的能力 window) 也就是说,Webview 打开了一个 PopUpWindowA,那么PopUpWindowA就会window.open()
PopUpWindowB,那么PopUpWindowB就会window.open()
PopUpWindow C。
在我的 WKWebView 中,我做了以下事情:
- 已实施
WKUIDelegate
- 设置
_webView.UIDelegate = self;
- 设置两个首选项:
wkWebViewConfig.preferences.javaScriptCanOpenWindowsAutomatically = YES;
wkWebViewConfig.preferences.javaScriptEnabled = YES;
- 创建方法如下
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
if (!navigationAction.targetFrame.isMainFrame) {
[webView loadRequest:navigationAction.request];
}
return nil;
}
我的样本html来源如下:
<!DOCTYPE html>
<html>
<head>
<script language="javascript">
function init()
{
setTimeout( () => {
window.open("testing2.html","mywindow","toolbar=no,menubar=no,location=no,directories=no,width=910,height=750");
}, 3000)
document.redirectForm.target="mywindow";
document.redirectForm.submit();
}
</script>
</head>
<body>
Going to testing2
<form>
<input type="button" onclick="init()" value="Click" />
</form>
<script type="text/javascript">
init();
</script>
</body>
</html>
我尝试用 https://www.google.com
替换 "testing2.html"
,它确实显示在 Google 网站上。但同样,由于某些客户端的架构设计 API
,我的目标是确保我的 WKWebView 能够打开 Nested PopUp Window
我读过一些类似的问题和答案:
我认为是因为window.open
没有打开本地文件(例如testing.html)。因此我安装了 http-server
以在本地主机上托管我的文件。
- npm i http-server -g
- cd 到我放置所有 html 文件的文件夹
- 运行
http-server
- 运行 来自
http-server
的最后一个 IP address:8080 return
- 您将在本地主机
中看到您所有的 .html 文件
- 将您的 .html 文件替换为 localhost link
我正在尝试 运行 Javascript 在 HTML 源中。里面的代码假设用我给出的另一个 HTML 来源打开一个新的 window。我的错误是什么?
(我的目标 是为了证明 WKWebView 有打开嵌套弹窗的能力 window) 也就是说,Webview 打开了一个 PopUpWindowA,那么PopUpWindowA就会window.open()
PopUpWindowB,那么PopUpWindowB就会window.open()
PopUpWindow C。
在我的 WKWebView 中,我做了以下事情:
- 已实施
WKUIDelegate
- 设置
_webView.UIDelegate = self;
- 设置两个首选项:
wkWebViewConfig.preferences.javaScriptCanOpenWindowsAutomatically = YES; wkWebViewConfig.preferences.javaScriptEnabled = YES;
- 创建方法如下
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
if (!navigationAction.targetFrame.isMainFrame) {
[webView loadRequest:navigationAction.request];
}
return nil;
}
我的样本html来源如下:
<!DOCTYPE html>
<html>
<head>
<script language="javascript">
function init()
{
setTimeout( () => {
window.open("testing2.html","mywindow","toolbar=no,menubar=no,location=no,directories=no,width=910,height=750");
}, 3000)
document.redirectForm.target="mywindow";
document.redirectForm.submit();
}
</script>
</head>
<body>
Going to testing2
<form>
<input type="button" onclick="init()" value="Click" />
</form>
<script type="text/javascript">
init();
</script>
</body>
</html>
我尝试用 https://www.google.com
替换 "testing2.html"
,它确实显示在 Google 网站上。但同样,由于某些客户端的架构设计 API
我读过一些类似的问题和答案:
我认为是因为window.open
没有打开本地文件(例如testing.html)。因此我安装了 http-server
以在本地主机上托管我的文件。
- npm i http-server -g
- cd 到我放置所有 html 文件的文件夹
- 运行
http-server
- 运行 来自
http-server
的最后一个 IP address:8080 return
- 您将在本地主机 中看到您所有的 .html 文件
- 将您的 .html 文件替换为 localhost link