专业技术揭秘安卓浏览器如何注入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,求助如何解决!