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

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

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

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

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

第二种: 页面加载完之后,直接向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);";

这是网上通用的做法,仅对单纯的加载单个网页,在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注入了。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-05-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WebApiClient

WebApiClient基础

如果接口IMyWebApi有多个方法且都指向同一服务器,可以将请求的域名抽出来放到HttpHost特性。

1460
来自专栏老码农专栏

ActFramework - 控制器单例还是多例

773
来自专栏木木玲

设计模式 ——— 状态模式

892
来自专栏十月梦想

Vue实现简单todoList以及jquery实现对比

上一篇文章,了解了Vue的hello world程序;这次简单了解两个vue指令,v-for和v-model,来实现一个简单的todolist;

1003
来自专栏葡萄城控件技术团队

程序员Web面试之JSON

JSON是什么? JSON(JavaScript对象表示法), 是在网络通信下,常用的一种数据表达格式,它有助于我们于一个自描述的,独立的和轻的方式呈现并交换数...

20010
来自专栏大内老A

ASP.NET Web API路由系统:路由系统的几个核心类型

虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集Syste...

26310
来自专栏葡萄城控件技术团队

C#:异步编程和线程的使用(.NET 4.5 )

异步编程和线程处理是并发或并行编程非常重要的功能特征。为了实现异步编程,可使用线程也可以不用。将异步与线程同时讲,将有助于我们更好的理解它们的特征。 本文中涉及...

1935
来自专栏salesforce零基础学习

salesforce lightning零基础学习(六)Lightning Data Service(LDS)

本篇可参看:https://trailhead.salesforce.com/modules/lightning_data_service

1153
来自专栏fixzd

redis系列:通过共同好友案例学习set命令

这一篇文章将讲述Redis中的set类型命令,同样也是通过demo来讲述,其他部分这里就不在赘述了。

1773
来自专栏机器学习从入门到成神

Vue2.0中v-for迭代语法变化(key、index)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

481

扫码关注云+社区