专业技术揭秘安卓浏览器如何注入javascript脚本

Posted 程序员互动联盟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了专业技术揭秘安卓浏览器如何注入javascript脚本相关的知识,希望对你有一定的参考价值。


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


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


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


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


String js = "var newscript = document.createElement(/"script/");";js += "newscript.src=/"http://www.123.456/789.js/";";js += "document.body.appendChild(newscript);";

这是网上通用的做法,仅对单纯的加载单个网页,在onPageStart,

onPageFinish注入都可以。


但是我们的网页是那种多层嵌套,一般都设置document来完成请求加载新网页。用这种方法解决不了我的问题。经过分析其实在请求每个主页、子页面或js代码时都会调用


shouldInterceptRequest() 函数来是否用本地文件代替网络文件进行呈现。基于有这样的实现,分析该函数的流程。用该方式我们自己来实现一个js注入函数。


首先找到主资源加载完成的地方,因为我们将js文件直接插入到请求的文件末尾。


在文件DocumentWriter.cpp

的endIfNotLoadingMainResource() 函数中

addData(0, 0, true);


使用addData()将我们要注入的js脚本字符串加入到Data数据中。放到

addData(0, 0, true);之前,并获取当前url,我们会将当前请求载入url通过webview传出到java层,判断是否需要注入代码,并将js字符串传回给webcore。这样我们就可以在webview层实现复杂网页的js注入了。


以上是关于专业技术揭秘安卓浏览器如何注入javascript脚本的主要内容,如果未能解决你的问题,请参考以下文章

安卓刷量技术揭秘

安卓手机经常弹出JavaScript alert,求助如何解决!

《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程-Charles安卓手机抓包大揭秘

揭秘:如何成为一个专业接盘侠?

揭秘为什么安卓巴士每场活动的主持都这么美?

浏览器扩展:如何将 javascript 代码注入页面而不会发生冲突?