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