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
}
希望对大家有所帮助。
由于某些 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
}
希望对大家有所帮助。