栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Android Web-View:将本地Javascript文件注入到远程网页

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android Web-View:将本地Javascript文件注入到远程网页

有一种方法可以“强制”从本地资产(例如,assets/js/script.js)中注入本地Javascript文件,并规避“不允许加载本地资源”:file:/// android_assets / js/script.js …’问题。

webview-loading-javascript-file-in-assets-folder))中描述的内容,并带有其他base64编码/解码,用于将Javascript文件表示为可打印的字符串。

我正在使用Android 4.4.2,API级别19虚拟设备。

以下是一些代码片段:

[assets / js / script.js]:

    'use strict';    function test() {       // ... do something    }    // more Javascript

[MainActivity.java]:

    ...    WebView myWebView = (WebView) findViewById(R.id.webView);    WebSettings webSettings = myWebView.getSettings();    webSettings.setJavascriptEnabled(true);    webSettings.setAllowUniversalAccessFromFileURLs(true);    myWebView.setWebViewClient(new WebViewClient() {       @Override       public boolean shouldOverrideUrlLoading(WebView view, String url) {          return false;       }       @Override       public void onPageFinished(WebView view, String url) {          super.onPageFinished(view, url);          injectscriptFile(view, "js/script.js"); // see below ...          // test if the script was loaded          view.loadUrl("javascript:setTimeout(test(), 500)");       }       private void injectscriptFile(WebView view, String scriptFile) {          InputStream input;          try {  input = getAssets().open(scriptFile);  byte[] buffer = new byte[input.available()];  input.read(buffer);  input.close();  // String-ify the script byte-array using base64 encoding !!!  String enpred = base64.enpreToString(buffer, base64.NO_WRAP);  view.loadUrl("javascript:(function() {" +    "var parent = document.getElementsByTagName('head').item(0);" +    "var script = document.createElement('script');" +    "script.type = 'text/javascript';" +  // Tell the browser to base64-depre the string into your script !!!    "script.innerHTML = window.atob('" + enpred + "');" +    "parent.appendChild(script)" +    "})()");          } catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace();          }       }    });    myWebView.loadUrl("http://www.example.com");    ...


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/432359.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号