[英]Calling JavaScript from Android
我在從 Android 內部調用基本 JavaScript 函數時遇到問題。 當我從本教程克隆存儲庫,然后將其剝離時,我能夠使代碼正常運行。 但是,在嘗試創建自己的新項目時,我沒有成功。
我參考了以下帖子,似乎也在做同樣的事情,但無濟於事。 這些方法之間沒有明顯的不同,所以我覺得這些文件之外可能存在我遺漏的依賴項?
Android 在 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函數
我想知道我是否在某個地方缺少細微的東西。
基本上,我只是想通過調用在其自己的文件中定義的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.