前言
说下应用场景,最近安卓要加载一些第三方网站进行用户的开放使用,这些第三方网站基本都是全英文的外国网站,于是产品需求希望能对网站进行中文翻译,类似pc浏览器的谷歌翻译网页
使用步骤
1.注入脚本
代码如下(示例):
private void translateWeb() { String javaScript = "javascript:function appendScrip() {" + "var head= document.getElementsByTagName('head')[0]; var script= document.createElement('script'); script.src= 'https://res.zvo.cn/translate/translate.js'; head.appendChild(script);" + "}" + "appendScrip();"; bwvContent.evaluateJavascript(javaScript, new ValueCallback() { @Override public void onReceiveValue(String s) { MyLogUtils.e("javaScript.onReceiveValue:" + s); bwvContent.postDelayed(new Runnable() { @Override public void run() { if (bwvContent==null) { return; } String javaScript2 = "javascript:function startTranslate() {" + "translate.localLanguage='zh-CN';translate.selectLanguageTag.show = false;translate.executeByLocalLanguage();" + "}" + "startTranslate();"; bwvContent.evaluateJavascript(javaScript2, new ValueCallback() { @Override public void onReceiveValue(String s) { MyLogUtils.e("javaScript2.onReceiveValue:" + s); } }); } }, 500); } }); }
注意点
1.这里的bwvContent用的是腾讯的webview,在执行注入脚本的时候用的evaluateJavascript方法,原生webview如果没有的话用loadurl也可
2.第一段脚本注入和第二段脚本注入加了个500ms的延时操作,因为实测过程中,连续执行的情况下容易没能顺利进行翻译,所以加了个500ms加高成功率,可自行调试测试
3.该方法的注入,选择时机放在了onProgressChanged回调里,当加载进度progress==100时,进行延时1000ms后执行该方法做自动网页翻译,或者由用户手动点击翻译按钮的时候调用,时机的选择自行调试
使用的注入脚本的相关链接:网页多语言翻译 js v1.2,更新翻译接口 – OSCHINA – 中文开源技术交流社区