【问题标题】:Handling Window.close in JavaScript through UIWebView - Obj C通过 UIWebView 处理 JavaScript 中的 Window.close - Obj C
【发布时间】:2015-08-05 21:11:27
【问题描述】:
我最近开始研究一个主要在UIWebView 上运行的 IOS 项目。现在我的UIWebView是UIWebViewDelegate的代表,我遇到的是我的应用程序没有响应window.close和window可能调用的其他window事件。现在我可以在我的shouldStartLoadWithRequest 委托方法中通过href 接收一个新的HTTP 请求。
我希望知道是否有办法在我的IOS 应用程序中侦听window 事件(例如window.close)并检索目标。我想尽可能远离injecting 任何形式的JavaScript 直接进入页面!
有人愿意解释这是否可行以及为什么?
【问题讨论】:
标签:
javascript
ios
objective-c
uiwebview
【解决方案1】:
使用UIWebView 没有注入一些JavaScript 就无法实现这一点。即使是较新的 WKWebView 仍然需要 JavaScript 注入来完成这项工作。
您将注入将覆盖 window.close 函数并触发位置更改的 JavaScript,例如 location.href = "uniquescheme://window.close";,正如您所说,可以在 shouldStartLoadWithRequest 中处理。
类似:
[self.webView stringByEvaluatingJavaScriptFromString:@"window.close = function () { location.href = 'uniquescheme://window.close'; }"]
【解决方案2】:
对于WKWebView,有一些方法可以捕获(实现 WKUIDelegate)的调用
window.open : createWebViewWithConfiguration: forNavigationAction: windowFeatures:
对于
window.close:webViewDidClose:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0)
请注意,它仅适用于 9.0 及更高版本。
但不在UIWebView中(其实还在研究是否可以不用注射就可以完成,如果找到的话会更新答案)