Android、iOS的webview注入JavaScript代码修改网页内容

需要修改webview中的网页内容、网页元素动作

1.实现原理

webview导航栏方法中执行JavaScript代码

浏览器地址栏是支持运行JavaScript代码的

javascript:开头后跟要执行的语句

// 弹窗
javascript:alert('hello world!');

ps:不可以复制粘贴的方式来测试,这样是无效的,至少“javascript:”是手写补全才可以

那么webview是否也可以呢?

在webview中同样适用本方法

虽然webview没有可见的地址栏,但是webview提供操作导航导航栏的方法

2.常用JavaScript代码片段

// 通过class查找隐藏本element
javascript:(function() {
   document.getElementsByClassName('your_class_name')[0].style.display='none'; 
})();
                
// 通过id查找因此本element
javascript:(function() {
   document.getElementById('your_id').style.display='none';
})();


// 某个element点击事件 并且修改打开一个弹窗后的页面element
javascript:(function() {
// 首次页面加载必须有的element
var url = 'https://www.baidu.com';
var text = 'p标签文本被替换了';
var bottom = document.getElementsByClassName('bottom')[0];
bottom.onclick = function(){
  // 弹窗element
    var dialogButton = document.getElementsByClassName('button')[0];
    var dialogItem = document.getElementsByClassName('item')[2].getElementsByTagName('p')[1];
    dialogButton.onclick = function(){window.open(url, '_self');}; // 点击事件跳转
    dialogItem.replaceWith(text); // 修改标签文本内容
};
})();

// 如果某些页面元素是在页面完成后出现的
// 也就是webview 到了 onPageFinished 周期中,页面元素还未加载出来,需要使用定时器来处理
// 定时器轮询检查页面元素对象,直到找到需要的处理的页面元素对象后进行处理,然后销毁定时器
var timer = setInterval(function () {
    if (document.getElementsByClassName("class name")[0]) {
      // 你的业务代码
      
      clearInterval(timer); // 销毁定时器
    }
  }, 1000);

3.Android中实现webview注入JavaScript代码

// java
final WebView webview = (WebView)findViewById(R.id.browser);
 
    webview.getSettings().setJavaScriptEnabled(true);
 
    webview.setWebViewClient(new WebViewClient() {
     @Override
    public void onPageFinished(WebView view, String url)
    {
        // hide element by class name
        webview.loadUrl("javascript:(function() { " +
                "document.getElementsByClassName('your_class_name')[0].style.display='none'; })();");
        // hide element by id
        webview.loadUrl("javascript:(function() { " +
                "document.getElementById('your_id_name').style.display='none';})();");
 
    }
    });
 
webview.loadUrl(url);

4.iOS中实现webview注入JavaScript代码

// objective-c

5.Flutter中实现webview注入JavaScript代码

参考 Android 和 iOS

6.进阶注入外部引入的hook.js代码

注入的JavaScript代码需要修改重新发包?

注入的JavaScript很大一段硬编码到APP包中如何管理?

进阶实现注入外部hook.js

把JavaScript代码单独写在hook.js并放置在cdn上

// https://www.iamle.com/hook.js
'v0.0.1 app webview hook'

;(function (window) {
    //your code
})(window)


// app 用webview.loadUrl方法中注入js
javascript:(function() {
   var script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = 'https://www.iamle.com/hook.js';
     document.body.appendChild(script);
})();

// Android java为例
 @Override
    public void onPageFinished(WebView view, String url)
    {
        String js = "javascript:(function() {";
        js += "var script = document.createElement('script');";
        js += "script.type = 'text/javascript';";
        js += "script.src = 'https://www.iamle.com/hook.js';";
        js += "document.body.appendChild(script);";
        js += "})();";
        view.loadUrl(js);
    }

这样后续修改只需要修改hook.js即可,APP不用重新打包📦

7.经验

在webview中不支持window.location.href进行网址导航

但是支持使用window.open, window.open(‘https://www.iamle.com‘, ‘_self’);

早就想买一个android系统机了,思量再三选出几款中意的android机,最后选定的是MB525。延续我以往的水货精神,果断淘宝港水。
昨天2140元淘宝拍下销往香港的机机,卖家包邮发的顺丰。顺丰非常给力啊,这不刚刚2011-04-12 20:33:13拿到快递。
       淘宝收货清点发的各种东西是否齐全,配件是否完好。当然最主要的手机也的好好检查。查询手机的IMEI MSN 和 手机上#*06# 是否吻合。 moto imei手机产地查询地址。http://www.moto110.com/。我的mb525查询出来无生产地,网上搜索了下,有些童鞋也是这样,不过没什么影响。

销往香港

 

        因为是moto的机子,用户界面用了MOTOBLUR,顺便注册一个MOTOBLUR帐号。 然后就是用电脑管理软件开始疯狂的装自己喜欢的android软件了。  个人推荐魔乐和豌豆荚。
        那么看到这博文的朋友你们那些用这款机子,或者用android机,或者那些比较值得推荐的软件呢?

我比较软件控,我会用到的软件都装,差不多有200多个了,用wordpress客户端写博客也不错。
image

       

   

        android sdk 官方采用网络安装的方式,很多时候网络状况让sdk安装颇为费时。wwek这里提供完整更新的android sdk包。

Android SDK:android-sdk_r08-windows 包含所有android版本更新至android2.3姜饼

ADT Plugin for Eclipse :Eclipse-ADT 8.0.1 已经集成2010年12月8日最新 eclipse for jee版本。

 

网盘下载:Android-SDK_r08-Windows-Eclipse-ADT8.0.1姜饼完整包-www.iamle.com.7z

Java jdk下载:jdk-6u23-windows-i586.exe

Android官网
http://androidappdocs.appspot.com/
http://developer.android.com

流水理鱼|wwek https://www.iamle.com

更新时间2010年12月8日 12:48:55

        www.iamle.com 的博客皮太丑了,我自己都看不下去了,好吧下WordPress主题制作的资料,好像我不会css不会php。浩荡的互联网资料非常多你没有借口! 于是就做吧,刚好本地环境搭建好捣鼓了下,自己水产了自己~~~~
        好嘞,会在CentOS Debian搭建web环境了,该学点php什么的吧。浩浩荡荡的在搜索引擎找到php的官方文档。本地搭建好php环境,打开编辑器,写入<?php echo “hello world!” echo “<br>” echo phpinfo();?> 等几天如是不知下文,自己水产了自己~
        android在智能手即将横行于世的时候降临,MOTO没在linux身上找到的被google找到了。android开发你有时间是否又去水产自己呢流水理鱼?
        autocad你也在用,二次开发别谈了先有时间把以上的事搞了再说。

        我狠我的懒惰,思想巨人,行动矮子![猪头]

六月 1st, 2009
http://www.gx.xinhuanet.com/newscenter/2009-05/25/content_16624525.htm

全是狠角色! 09年手机系统对峙新格局

  ● 系统大战下 智能机的对峙关系

  从谷歌手机走进大家的视野,从第一部Android系统为大家所了解,再到后来Android联盟的成立,我们看到三星、华为、联想、摩托罗拉、索爱等等诸多制制造商的加入,他们打破计划开始研发全新的Android手机,不是开发新的市场,就是以此为活命的契机。

  联盟还是对立,生存或是毁灭

  最终,这一切换来了Android今日所受到的重视,应该说像诺基亚这样强大的制造商也开始以它为敌,手机领域的新趋势也正在形成,至少09年被很多人预测为Android时代一个更加开源的时代。

  近段时间,我们看到了诺基亚与英特尔共谋新系统的消息,看到了移动联想合作的Ophone,联通计划中的Uphone,微软完全免费的My

  Phone数据备份服务,黑莓的最新触控技术以及palm的新系统。很多制造商运营商们各自寻求的新系统已经成为潮流,开源这个词再度提到一个很高的位置。

  就像每一个系统需要有一个理想终端来承载才能被大家了解一样,每款被选作”样机”的手机也是对全新系统最好的诠释。因此,今天我们还是说产品,无论是Android、塞班、微软等等系统,他们都在不断改革、融合的过程中进步,我们重视的必将是产品带来的全新使用感受,下边我们就在介绍产品同时来了解目前的智能系统新格局。

  ●

  新生力量 Android智能平台

  Android是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。

  Android平台的研发队伍阵容强大,其联盟包括Google、HTC(宏达电)、T-Mobile、高通、摩托罗拉、三星、LG以及中国移动在内的34家企业。

  去年9月第一款Google手机T-Mobile

  G1诞生。它是世界上第一部使用Android操作系统的手机,支持WCDMA/HSPA网络,理论下载速率7.2Mbps,并支持Wi-Fi。09年,第二款Google手机也正式上市,基本的硬件功能得到进一步提升。

  配备了3.2英寸HVGA级别(480 x 320分辨率的)TFT材质的可触摸屏幕。采用了Android系统平台,以及Qualcomm MSM7201a处理器,频率为528MHz。支持GSM/GPRS/EDGE/WCDMA/HSDPA网络,可提供最高7.2Mbps的网络下载速度和支持及WLAN无线局域网接入功能。内置多媒体播放器,支持AAC/AAC+/AMR-NB/MP3/WMA/WAV/AAC-LC/MIDI/OGG等多种格式文件播放。配备了3.5毫米耳机接口和G-Sensor传感器。

  ●

  Android系统 三星i7500发布

  除了源自谷歌的产品,联盟中的其他制造商也致力于推出Android系统的产品。日前,刚刚曝光的三星i7500正式发布,它很有可能成为三星旗下的第一款Android系统手机。这款手机将在欧洲率先上市,由运营商O2独家定制发售。

  三星i7500机身厚度仅有11.9毫米,采用直板设计,配备了3.2英寸HVGA级别480×320分辨率的可触摸屏幕。内置500晚像素摄像头,支持自动对焦,配备LED闪光灯。i7500采用Google最新版智能手机操作系统Android

  1.5,支持四频GPRS/EDGE和双频UMTS/HSPA网络,内置多媒体播放器,支持MPEG4、H.263、H.264、WMV视频格式和MP3、AAC、AAC+、e-AAC+、WMA、RA音频。

  配置高通528MHz MSM7200A CPU,内置8GB内存,配备microSD插槽,可扩展至32GB。手机配备3.5mm立体声耳机插孔,电池容量为1500mAh,将支持GPS全球定位系统,支持蓝牙以及Wi-Fi,支持所有Google服务,包括搜索、Google地图、Gmail、YouTube、Google日历以及整合GPS 功能的Google Talk,将在今年6月上市销售,零售价约为300欧元。

  ●

  Android系统 华为首款手机官方曝光

  除了韩国三星电子外,全球大厂摩托罗拉和索尼爱立信等等也在努力研发中,摩托罗拉甚至在经济危机被迫裁员的情况下将手机研发的重点全部投入在 Android平台手机手机上,可见他的重视。除此之外,例如华为这样的研发公司也注重对Android系统手机的研发。华为的首款Android平台手机在今年的MWC2009大会上首度曝光,表明了华为研发Android平台手机将是今年的重点任务之一。

  在外形上华为谷歌系统手机引人了苹果iPhone的元素,从超大的屏幕,到最终的触摸体验,它将实现iPhone与谷歌手机完美的的结合。它配备了3.8英寸的全触屏,内置500万像素摄像头,支持自动对焦。

  而其他消息显示,这款华为Android平台手机同时还将配备3.5mm标准耳机接口、WLAN无线局域网功能、G-Sensor传感器(可实现屏幕自动旋转)、YouTube、FM收音机、蓝牙2.0+EDR、USB 2.0、GPS导航、电子罗盘功能、Google地图功能、Google Maps街景、Google搜索、Android Market应用程序下载、HSDPA技术等功能。目前的消息并不代表上市的最终产品配置,据了解,这款手机将于今年第三季度上市。

  ●

  对抗Android 诺基亚开源新系统Ofono

  正在Android系统春风得意之时,一个最新的传闻打破了Android独占未来开源市场的梦想。日前有传闻称,诺基亚将会与英特尔合作共同启动一个新的Linux项目来对抗目前的Android开源系统。虽然这个消息还只是传闻,但诺基亚明显没有加入Android联盟的可能,想要以塞班系统与Android的开源系统对抗,比较十足的把握不如联合强大力量研发全新的开源系统。

  而这个可能出现的开源系统现在终于初露端倪,这个项目叫作Ofono,已经悄悄的走进我们的视线了。它将用于智能手机或是移动互联网平台设备之上。目前阶段,GSM/UMTS手机应用开发人员可以轻松的创建这些应用服务技术,甚至是用户界面开发。所以不用为这些担心太多,也不用假想它还要研发多么长的时间。

  Intel此次能与诺基亚达成协议,确实是两家一拍即合的结果。Intel计划进入移动产品领域已经很久,而诺基亚为塞班系统寻求更多支持也是情理之中,总之很期待这个新系统能尽快成熟。

  ●

  移动网络时代革新 塞班新机N97

  通过上边的消息大家应该也能了解,当初诺基亚的计划有了些许改动,诺基亚或许不想将Symbian系统转变为完全免费的开源商业模式的系统。虽然开源被看作是未来不可逆的趋势,但诺基亚收购Symbian后难免会有更为理性的发展计划。

  因此,我们看到诺基亚最新推出的N97,它不只是N系列的有一颗耀眼旗舰,