博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android】webview javascript 注入方法
阅读量:4619 次
发布时间:2019-06-09

本文共 1786 字,大约阅读时间需要 5 分钟。

Android中向webview注入js代码可以通过webview.loadUrl("javascript:xxx")来实现,然后就会执行javascript后面的代码。

但是当需要注入一整个js文件的时候,貌似就有点麻烦了。

不过理清以下思路,方法其实也很简单,如下:
我们通过在webview的onPageFinished方法中执行js代码注入:

第一种:

当webview加载完之后,读取整个js文件中的内容,然后将整个文件内容以字符串的形式,通过webview.loadUrl("javascript:fileContentString")注入

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();

 

@Overridepublic void onPageFinished(WebView view, String url)  {        super.onPageFinished(view, url);         webview.loadUrl("javascript:" + wholeJS); }

 

第二种:

页面加载完之后,直接向webview对应的html中加入<script>便签,并包含要注入的js的Url地址,如下:

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已加载完成。代码可更改如下:

String js = "var newscript = document.createElement(\"script\");";   js += "newscript.src=\"http://www.123.456/789.js\";";   js += "newscript.οnlοad=function(){xxx();};";  //xxx()代表js中某方法   js += "document.body.appendChild(newscript);";

 

IOS中也一样,按照同样的思路然后在-(void)webViewDidFinishLoad:(UIWebView *)webView 中使用[webView stringByEvaluatingJavaScriptFromString:@"xxx"];即可 。

 

 

 

转载于:https://www.cnblogs.com/rayray/p/3680500.html

你可能感兴趣的文章
利用API自动建立GL科目段组合
查看>>
UVA 696 How Many Knights
查看>>
2018.10.13 队测总结
查看>>
水平垂直居中方法总结
查看>>
uva 10391字典树
查看>>
还是挤牌
查看>>
通往财富自由之路5--你拥有的最宝贵的财富是什么?(问答02)
查看>>
用vue-cli搭建项目的 Vue-router
查看>>
本地存储 [记录]
查看>>
C#的一些必备技术
查看>>
【转载】学习顺序:顶级会议 ----> 顶级期刊 ------> 基础教材(博客) / 论文复现...
查看>>
Deep Learnning
查看>>
Css预处理器---Less(二)
查看>>
config windows virtual machine on mac
查看>>
Shell——windows上写完放入linux的时候需要注意的问题
查看>>
通过拦截器Interceptor实现Spring MVC中Controller接口访问信息的记录
查看>>
65条常用的正则表达式
查看>>
Vscode断点调试PHP
查看>>
做前端要做的6大事
查看>>
测试工程师,选择python还是java?
查看>>