Android中向webview注入js代码能够经过webview.loadUrl("javascript:xxx")来实现,而后就会执行javascript后面的代码。javascript
可是当须要注入一整个js文件的时候,貌似就有点麻烦了。
不过理清如下思路,方法其实也很简单,以下:
咱们经过在webview的onPageFinished方法中执行js代码注入:html
第一种:
当webview加载完以后,读取整个js文件中的内容,而后将整个文件内容以字符串的形式,经过webview.loadUrl("javascript:fileContentString")注入java
URL url = new URL("http://www.rayray.ray/ray.js"); in = url.openStream(); byte buff[] = new byte[1024]; ByteArrayOutputStream fromFile = new ByteArrayOutputStream(); FileOutputStream out = null; do { int numread = in.read(buff); if (numread <= 0) { break; } fromFile.write(buff, 0, numread); } while (true); String wholeJS = fromFile.toString();
@Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); webview.loadUrl("javascript:" + wholeJS); }
第二种:
页面加载完以后,直接向webview对应的html中加入<script>便签,并包含要注入的js的Url地址,以下:web
String js = "var newscript = document.createElement(\"script\");"; js += "newscript.src=\"http://www.123.456/789.js\";"; js += "document.body.appendChild(newscript);";
@Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); webview.loadUrl("javascript:" + js); }
后记:上面两种方式中,第二种方法更加简单方便一点。不过第二种方法也有问题,当你注入完JS以后你想要当即调用其中的方法,第一种方法没问题能够调用到。可是第二种方法中,你要确保注入的<script>便签对应的js文件加载完才可调用成功。
解决:在第二种方法中为加入script标签添加onload事件,确保该script已加载完成。代码可更改以下:app
String js = "var newscript = document.createElement(\"script\");"; js += "newscript.src=\"http://www.123.456/789.js\";"; js += "newscript.onload=function(){xxx();};"; //xxx()表明js中某方法 js += "document.body.appendChild(newscript);";
IOS中也同样,按照一样的思路而后在-(void)webViewDidFinishLoad:(UIWebView *)webView 中使用[webView stringByEvaluatingJavaScriptFromString:@"xxx"];便可 。ide