本文介绍的是在 初始化 webView 就 注入 js 文件 ,然后再 加载每个地址的时候 都能调用这个JS文件里的方法
准备 Abc.js 放到跟目录
if (!this.__testjs__) { __testjs__ = {}; } __testjs__.Class1 = { hideLogo: function (str) { //logo 将消失 var element = document.getElementById("logo") element.innerHTML = str return document.title }, };
目录位置
然后是swift 文件
override func viewDidLoad() {
super.viewDidLoad()
let webView = WKWebView(frame: CGRect(x: 0, y: 50, width: screenWidth, height: screenHeight-50))
//初始化WebView 时将JS注入webView
if let path = Bundle.main.path(forResource: "Abc", ofType: "js") {
let source = NSString(data: NSData(contentsOfFile: path) as! Data, encoding: UInt(String.Encoding.utf8.hashValue));
let userScript = WKUserScript(source: source as! String, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)
webView.configuration.userContentController.addUserScript(userScript)
}
self.view.addSubview(webView)
let url:String = "http://m.baidu.com"
webView.load(NSURLRequest(url: NSURL(string: url) as! URL) as URLRequest);
// 3.5 秒后执行 JS 代码 ,一般情况都是 在webView 加载完成后才执行
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3.5){
webView.evaluateJavaScript("__testjs__.Class1.hideLogo('sddd')") { (response, error) in
if error != nil {
print(" error: ")
} else {
print(response as! String)
}
}
}
}
效果就是 打开m.baidu.com 后一会, logo 消失 并显示 sdd