繁体   English   中英

从 Android 调用 JavaScript

[英]Calling JavaScript from Android

我在从 Android 内部调用基本 JavaScript 函数时遇到问题。 当我从本教程克隆存储库,然后将其剥离时,我能够使代码正常运行。 但是,在尝试创建自己的新项目时,我没有成功。

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

Android 在 WebView 中调用 JavaScript 函数

在 Webview 中运行 javascript 代码

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

基本上,我只是想通过调用在其自己的文件中定义的 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()

根据 CW 的回答

您需要等到页面加载完毕

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();
    }
});

你能试试这个吗

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);

我在从Android内调用基本JavaScript函数时遇到麻烦。 当我从本教程克隆存储库,然后将其剥离时,我能够使代码正常运行。 但是,当尝试创建自己的新项目时,我一直没有成功。

我已经引用了以下帖子,并且似乎在做同样的事情,但无济于事。 两种方法之间没有明显的区别,所以我觉得这些文件之外可能还缺少依赖项吗?

WebView中的Android调用JavaScript函数

在Webview中运行javascript代码

我想知道我是否在某个地方缺少细微的东西。

基本上,我只是想通过调用在其自己的文件中定义的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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM