Swift stringByEvaluatingJavaScriptFromString

时间:2014-09-26 09:19:47

标签: javascript ios webview swift uiwebview

我尝试使用新的

在我的WebView上使用一些javascript

stringByEvaluatingJavaScriptFromString功能

我不熟悉语法,所以我试过

 func stringByEvaluatingJavaScriptFromString( "document.documentElement.style.webkitUserSelect='none'": String) -> String? 

如此处所示https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebView_Class/index.html#//apple_ref/occ/instm/UIWebView/stringByEvaluatingJavaScriptFromString:但我收到“预期”错误。分隔符“

3 个答案:

答案 0 :(得分:9)

您尝试调用的方法原型如下:

func stringByEvaluatingJavaScriptFromString(_ script: String) -> String?

这意味着:

  • String作为单个参数
  • 返回可选的StringString?

您需要有一个UIWebView的实例才能使用它:

let result = webView.stringByEvaluatingJavaScriptFromString("document.documentElement.style.webkitUserSelect='none'")

由于返回类型为optional,因此需要先将其解包,然后才能使用它。 但要小心,它可能没有值(即它可能等于nil)并且解包nil值会导致运行时崩溃。

因此,您需要在使用返回的字符串之前检查它:

if let returnedString = result {
    println("the result is \(returnedString)")
}

这意味着:如果result不是nil,则将其解包并将其分配给名为returnedString的新常量。

此外,您可以将其与:

包装在一起
let script = "document.documentElement.style.webkitUserSelect='none'"
if let returnedString = webView.stringByEvaluatingJavaScriptFromString(script) {
    println("the result is \(returnedString)")
}

希望这对你有意义。

答案 1 :(得分:0)

此方法用于直接从uiwebview

调用javascript脚本
let htmlTitle = myWebView.stringByEvaluatingJavaScriptFromString("document.title");
println(htmlTitle) 

http://sourcefreeze.com/uiwebview-example-using-swift-in-ios/

答案 2 :(得分:0)

1)创建JavaScript常量:

let jsString: String = "document.documentElement.style.webkitUserSelect='none'"

2)将evaluateJavaScript功能用于WKWebView(iOS 8.0 +)

self?.webView?.evaluateJavaScript("", completionHandler: { result, error in
       print(result)
})

stringByEvaluatingJavaScriptFromString for UIWebView(iOS 2.0–12.0)

let result = webView.stringByEvaluatingJavaScriptFromString(jsString)
print(result)

同样来自Apple文档:

stringByEvaluatingJavaScriptFromString:方法同步等待 完成JavaScript评估。 如果您加载的网页内容 您尚未审核的JavaScript代码,调用此方法可能会挂起 您的应用。最佳实践是采用WKWebView类并使用其 而不是EvaluationJavaScript:completionHandler:方法。