当前位置: 首页 > 面试题库 >

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

吴谦
2023-03-14
问题内容

之前已经被问过很多遍了,我浏览了所有内容,但还没有明确的答案。

问题简化:是否可以将本地Javascript文件(从资产或存储)注入到Android Web
View中加载的远程网页?我知道可以将此类文件注入Web视图中加载的本地网页(资产HTML)。

为什么我需要这个来工作?:通过避免每次都下载较大的文件(例如Js和CSS文件)来提高浏览体验的速度。我想避免Web视图缓存。


问题答案:

有一种方法可以“强制”从本地资产(例如,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 encoded = Base64.encodeToString(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-decode the string into your script !!!
                          "script.innerHTML = window.atob('" + encoded + "');" +
                          "parent.appendChild(script)" +
                          "})()");
          } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
          }
       }
    });

    myWebView.loadUrl("http://www.example.com");

    ...


 类似资料:
  • 本文向大家介绍PHP实现远程下载文件到本地,包括了PHP实现远程下载文件到本地的使用技巧和注意事项,需要的朋友参考一下 代码很简单就不多废话了,直接奉上: 再来个远程下载文件到服务器 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 问题内容: 我得到了在远程主机上创建文件的代码: 但是需要将文件从远程主机复制到本地主机。我怎样才能做到这一点使用golang工具 **github.com/pkg/sftp 和 **golang.org/x/crypto/ssh 只? 问题答案: 您可以使用sftp包中的和方法来完成此操作(当然,您需要os.File或类似的东西来写入)。

  • 如何使用将文件夹从远程复制到本地主机? 我使用登录我的服务器。 然后,我要将远程文件夹复制到本地。 我如何实现这一点?

  • 我正在尝试复制本地文件“magento”。焦油通过VPN使用SSH将gz从我的本地机器传输到远程服务器。这是连接到虚拟机的内部IP,我用它作为xx。x、 这里是x.xx。 我对SSH帐户有完全的“sudo”访问权限,所以复制应该没有任何问题。我尝试了以下操作: 我尝试了以下方法(magento.tar.gz文件已经在本地根目录中) 这要求我输入本地密码。之后返回cp:user@xx.x.x.xx/

  • 一个JS文件想使用本地一个JSON文件中的数据 百度了下,发现不能直接去读取这个JSON文件。可以通过JQUERY的一个方法或者new XMLHttpRequest();这样来获取到JSON文件中的内容,不知道还有没有其他更简洁的方法? https://segmentfault.com/a/1190000038275195