【Android】webview javascript 注入方法

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

相关文章
相关标签/搜索