簡體   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