【问题标题】:Calling JavaScript from Android从 Android 调用 JavaScript
【发布时间】:2018-10-28 04:59:44
【问题描述】:

我无法从 Android 中调用基本的 JavaScript 函数。当我从this tutorial 克隆存储库,然后将其剥离时,我能够让代码正常运行。但是,在尝试创建自己的新项目时,我没有成功。

我参考了以下帖子,似乎也在做同样的事情,但无济于事。这些方法之间没有明显差异,所以我觉得这些文件之外可能存在我缺少的依赖项?

Android Calling JavaScript functions in WebView

Run javascript code in Webview

我想知道我是否在某处遗漏了一些微妙的东西。

基本上,我只是想通过调用在其自己的文件中定义的 JavaScript 函数来将任何输出发送到控制台。 项目结构如下:

main
- assets
  - index.html
  - sketch.js

- java
  - com.mypackage
    - MainActivity.java

我有一个文件sketch.js,里面有以下函数

function hello() {
    console.log("hello world");
}

还有一个带有以下代码的index.html 文件

<!DOCTYPE html>
<html>
  <head>
    <script src="sketch.js" type="text/javascript"></script>

  </head>
  <body>
  <canvas></canvas>
  </body>
</html>

然后从我的活动类中,我有以下 Java 代码

webView = (WebView) findViewById(R.id.webView);
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setJavaScriptEnabled(true);

webView.loadUrl("file:///android_asset/index.html");

webView.evaluateJavascript("javascript:hello();", null);
webView.evaluateJavascript("console.log('Hello world 2');", null);

在 Android Studio 的控制台中,我看到了

[INFO:CONSOLE(1)] "Uncaught ReferenceError: hello is not defined", source:  (1)
I/chromium: [INFO:CONSOLE(1)] "Hello world 2", source:  (1)

如何修复此代码以便能够调用位于单独文件中的简单 JavaScript 函数 hello()

【问题讨论】:

    标签: javascript android android-webview


    【解决方案1】:

    根据CWanswer

    你需要等到你的页面加载完毕

    private void helloJs(){
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            webView.evaluateJavascript("javascript:hello();", null);
        } else {
            webView.loadUrl("javascript:hello();");
        }
    }
    
    webView.setWebViewClient(new WebViewClient() {
        public void onPageFinished(WebView view, String url) {
            helloJs();
        }
    });
    

    【讨论】:

      【解决方案2】:

      你可以试试这个

      webView = (WebView)findViewById(R.id.webView);
      webView.setWebViewClient(new webViewClient()); \\ added this line
      webView.getSettings().setJavaScriptEnabled(true); \\ moved this line before to setting Web Chrome Client
      webView.setWebChromeClient(new WebChromeClient());
      
      webView.loadUrl("file:///android_asset/index.html");
      
      webView.evaluateJavascript("javascript:hello();", null);
      webView.evaluateJavascript("console.log('Hello world 2');", null);
      

      【讨论】:

      • 您的webViewClient 课程中有什么内容,为什么需要它?我假设这将是我需要正确定义的自定义内部类?我尝试创建一个扩展 WebViewClient 的空白,但这并没有改变这种情况
      猜你喜欢
      • 1970-01-01
      • 2014-05-18
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多