javascript - 无法从 Activity 调用 javascript 函数

标签 javascript android android-activity

WebView myWebView = (WebView) findViewById(R.id.webview);                
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setPluginsEnabled(true);        
    myWebView.loadUrl("file:///android_asset/index.html");
    myWebView.loadUrl("javascript:hello()");

它不适用于 4.0 模拟器或真实设备。我在 html 中有正确的标签,例如

<script type="text/javascript">..</script>

我可以毫无问题地从 Firefox 的控制台启动它(它不会调用警报命令,我知道它在 Android 中不起作用)

我没有解决方案,请帮助我。

顺便说一句,这个函数调用在这里似乎没什么用,因为它是用于测试的,如果可行的话我稍后会给出一个参数。

编辑:

<h1 id="title"></h1>
....

<script type="text/javascript">
function hello()
{
  console.log("hello"); 
  var title = document.getElementById("title");
  title.innerHTML = "hello";    
}
</script>

最佳答案

问题在于,当您调用 javascript 时,无法保证页面已加载。确保仅在页面完全加载时调用 JavaScript 函数。

以下代码(引用自 http://lexandera.com/2009/01/injecting-javascript-into-a-webview/ )将为您提供提示。

final WebView webview = (WebView)findViewById(R.id.browser);
/* JavaScript must be enabled if you want it to work, obviously */
webview.getSettings().setJavaScriptEnabled(true);

/* WebViewClient must be set BEFORE calling loadUrl! */
webview.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url)
    {
        webview.loadUrl("javascript:(function() { " +
                "document.getElementsByTagName('body')[0].style.color = 'red'; " +
                "})()");
    }
});

webview.loadUrl("http://code.google.com/android");

关于javascript - 无法从 Activity 调用 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12277644/

相关文章:

android - Android 应用程序中 Sound Pool 的致命异常

android - MediaPlayer 自 r10 以来不再在模拟器上工作?

android - React Native 输出是 .class(对于 android)和 .c(对于 iOS)

java - AsyncTask 与嵌套类的数据通信

javascript - 通过 angular.js 中的作用域变量显示或附加元素

javascript - 如何在数组中推送多个值?

javascript - 如何获取jquery mobile显示的页面的 "id"

javascript - 尝试使用 windows.location.href 时, $_POST ['' ] 的值丢失

android - Android中通过Intent传递数据,只想要点击次数

android - 记录在 Android 中启动的 Activity