android:webview没有加载自定义WebViewClient的javascript

时间:2010-08-06 12:08:14

标签: javascript android webview webviewclient

我有一个非常基本的WebView,直到我尝试添加自定义webViewClient停止处理JavaScript。难道我做错了什么?是否有另一种方法可以摆脱WebView中的地址栏和菜单选项?

    browser = (WebView) findViewById(R.id.webkit);

    WebSettings webSettings = browser.getSettings();
    webSettings.setJavaScriptEnabled(true);

    // uncommenting this line will remove address bar, but also stop JavaScript from loading
    //browser.setWebViewClient(new InternalWebViewClient());

    // even uncommenting this line will stop JavaScript from loading
    //browser.setWebViewClient(new WebViewClient());

    browser.setWebChromeClient(new InternalWebChromeClient());
    if (savedInstanceState != null) {
        browser.restoreState(savedInstanceState);
    } else {
        browser.loadUrl("http://site.with.javascript");
    }

3 个答案:

答案 0 :(得分:4)

在我的应用程序中,我使用以下内容并且没有地址栏,JavaScript工作(修改后与您的命名相匹配):

browser = (WebView) findViewById(R.id.webkit);
browser.getSettings().setJavaScriptEnabled(true);

browser.loadUrl("http://site.with.javascript");

我对setWebViewClientsetWebChromeClient没有做任何事情,并且按照描述运作。

我认为您的代码存在的问题是您在默认(内部)WebViewClient和/或WebChromeClient上启用JavaScript,然后使用现有新属性的新代码替换它们。

如果您将setJavaScriptEnabled(true)来电转移到这些新作业之后(在loadUrl我认为您的代码可行之前。

答案 1 :(得分:3)

出于某种原因,webkit以不同于浏览器的方式运行JS - 我最终通过强制某些JS在页面加载后使用以下行运行来解决问题:

browser.loadUrl("javascript:document.getElementById('something').do.something()");

答案 2 :(得分:0)

我得到了这样一个决定的帮助。用匿名函数包装计算。

"javascript:" + "(function(){ <YOUR CODE> })();"