UIWebView 在 Swift3 下的 shouldStartLoadWith 中停止获取 JS 事件

UIWebView stopped getting JS events in shouldStartLoadWith under Swift3

由于某些 WKWebView 不适合我的原因,我在我的应用程序中使用了 UIWebView。 解释说,我刚刚将我的应用程序转换为 Swift3(是 2.2)并且我的 shouldStartLoadWith 函数没有获得 JS 事件。 如果我 运行 我之前的转换前构建 - 一切正常。

我的代码如下所示:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

        let url:URL = request.url!
        if (url.scheme == "something"){

            if (url.host != nil){
                var properString = url.absoluteString.removingPercentEncoding!
                properString = properString.replacingOccurrences(of: "something://", with: "")
                performJSFunction(message: properString)
            }

            return false;
        }

        return true
    }

注意:服务器side/html页面没有任何变化。

经过多次尝试,我发现 UIWebView 将获得开头为 https://http:// 的事件。

所以如果你以前是这样得到它的:

appname://something

现在你应该这样得到它:

https://appname//something

(请注意,"appname" 之后的点将被自动删除 - 即使您将通过 src attribute 发送它。

我知道这不是你想要的 - 但它确实很好用。

对于那些试图做同样工作但使用 local html 文件的人来说,这与 https://http://.

解决方案是将 <button> 更改为 <a> 标签。

<a onclick="interface.callFromJS()" href="inapp://capture" ontouchstart="">Your Button Message</a>

然后您将能够在那里捕捉到这些事件:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

        if (request.url?.scheme == "inapp")
        {
            doYourAction()      
        }

        return true

    }

希望对大家有所帮助。