【问题标题】:Handling Window.close in JavaScript through UIWebView - Obj C通过 UIWebView 处理 JavaScript 中的 Window.close - Obj C
【发布时间】:2015-08-05 21:11:27
【问题描述】:

我最近开始研究一个主要在UIWebView 上运行的 IOS 项目。现在我的UIWebViewUIWebViewDelegate的代表,我遇到的是我的应用程序没有响应window.closewindow可能调用的其他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.closewebViewDidClose:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0)

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

      但不在UIWebView中(其实还在研究是否可以不用注射就可以完成,如果找到的话会更新答案)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        • 2012-10-14
        相关资源
        最近更新 更多