外部JS可以在iOS WkWebView中的加载页面(完成时)上执行吗

Posted

技术标签:

【中文标题】外部JS可以在iOS WkWebView中的加载页面(完成时)上执行吗【英文标题】:Can External JS be executed on a loaded page (when complete) in iOS WkWebView 【发布时间】:2015-12-05 03:42:16 【问题描述】:

是否可以将外部 JS 注入 ios 应用(具体为 wkwebview)内的 Web View 中,然后执行?

不是用于 safari 的 adblock api - 但想象一下做同样事情的简单 JS/JQ。找一门课,换一门课。

这可以吗?如果是这样 - 在 WkWebview 中可以执行哪些类型的 javascript 是否有限制?

【问题讨论】:

【参考方案1】:

如果您有要加载和使用的本地 JavaScript 文件。类似于添加一个

<script src="file.js" />

你可以在swift中使用它

let root = NSBundle.mainBundle().resourceURL!
let JSURL = root.URLByAppendingPathComponent("file.js")
let JSString = try! String(contentsOfURL: JSURL)
let WKJS = WKUserScript(source: JSString, injectionTime: WKUserScriptInjectionTime.AtDocumentStart, forMainFameOnly: false)
webView.configuration.userContentController.addUserScript(WKJS)

【讨论】:

【参考方案2】:

对于 WKWebView,您有以下实例方法来执行 Javascript。要执行的 JS 必须作为 NSString 发送给方法。

Obj-C

- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *error))completionHandler

斯威夫特

func evaluateJavaScript(_ javaScriptString: String, completionHandler completionHandler: ((AnyObject?, NSError?) -> Void)?)

参考:https://developer.apple.com/library/ios/documentation/WebKit/Reference/WKWebView_Ref/index.html#//apple_ref/occ/instm/WKWebView/evaluateJavaScript:completionHandler:

【讨论】:

以上是关于外部JS可以在iOS WkWebView中的加载页面(完成时)上执行吗的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView 是不是支持加载外部 javascript 文件?

[iOS开发]WKWebView加载JS

iOS获取WKWebView的高度

ios开发之--WKWebView的使用

iOS WKWebView与H5交互,JS调OC传值、OC调JS传值、进度条加载等(干货满满)

尝试在 WKWebview 中加载 url 但在 SFSafariViewController 或 iOS 中的外部 safari 中工作正常时出现会话过期错误