我最近开始研究一个主要在UIWebView
上运行的IOS项目。现在我的UIWebView
是UIWebViewDelegate
的代表,我遇到的是我的应用不响应window.close
以及window
可能调用的其他JavaScript
个事件。现在,我可以通过HTTP
委托方法中的href
获取新的shouldStartLoadWithRequest
请求。
我希望知道是否有办法在我的window
应用中监听window.close
个IOS
事件并检索目标。我希望尽可能多地将injecting
任意JavaScript
的{{1}}误导到页面中!
任何人都在关心是否可能这样做以及为什么?
答案 0 :(得分:3)
使用UIWebView
,如果不注入一些JavaScript,就无法实现这一目标。即使是较新的WKWebView
,仍然需要使用JavaScript注入才能实现这一功能。
您会注入一些覆盖window.close
功能的JavaScript,并使用location.href = "uniquescheme://window.close";
之类的内容来触发位置更改,正如您所说,可以在shouldStartLoadWithRequest
中处理。
类似的东西:
[self.webView stringByEvaluatingJavaScriptFromString:@"window.close = function () { location.href = 'uniquescheme://window.close'; }"]
答案 1 :(得分:3)
对于WKWebView
,有一些方法可以捕获(实现WKUIDelegate)
window.open
:createWebViewWithConfiguration: forNavigationAction: windowFeatures:
和
window.close
:webViewDidClose:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0)
请注意,它只能提供9.0及更高版本。
但不在UIWebView
中(实际上还在调查是否可以在没有注射的情况下完成,如果我找到任何答案就会更新答案)