通过 UIWebView 处理 JavaScript 中的 Window.close - Obj C

Handling Window.close in JavaScript through UIWebView - Obj C

我最近开始从事一个主要在 UIWebView 上运行的 IOS 项目。现在我的 UIWebViewUIWebViewDelegate 的代表,我遇到的是我的应用程序不响应 window.closeJavaScript 可能调用的其他 window 事件.现在我可以在我的 shouldStartLoadWithRequest 委托方法中通过 href 接收一个新的 HTTP 请求。

我希望知道是否有办法在我的 IOS 应用程序中监听 window 事件,例如 window.close 并检索目标。我想尽可能远离 injecting 任何类型的 JavaScript 直接进入页面!

有人愿意解释这是否可能以及为什么吗?

使用 UIWebView 不注入一些 JavaScript 就无法实现这一点。即使是较新的 WKWebView 仍然需要 JavaScript 注入才能完成这项工作。

您将注入 JavaScript 来覆盖 window.close 函数并触发位置更改,例如 location.href = "uniquescheme://window.close"; ,正如您所说,可以在 [=15= 中处理].

类似于:

[self.webView stringByEvaluatingJavaScriptFromString:@"window.close = function () { location.href = 'uniquescheme://window.close'; }"]

对于 WKWebView 有一些方法可以捕获对(实现 WKUIDelegate)的调用

window.open : createWebViewWithConfiguration: forNavigationAction: windowFeatures:

window.close : webViewDidClose:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0)

请注意,它仅适用于 9.0 及更高版本。

UIWebView 中没有(实际上仍在调查是否可以在不注入的情况下完成,如果找到任何答案,我会更新答案)