2

我有一个非常基本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");
    }
4

3 回答 3

4

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

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

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

setWebViewClient我对or不做任何事情,setWebChromeClient它按描述工作。

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

如果您将setJavaScriptEnabled(true)呼叫移至这些新任务之后(并且在loadUrl我认为您的代码可以工作之前)。

于 2010-08-06T13:27:51.280 回答
3

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

browser.loadUrl("javascript:document.getElementById('something').do.something()");
于 2010-08-09T13:01:50.110 回答
0

这样的决定帮助了我。将计算包装在一个匿名函数中。

"javascript:" + "(function(){ <YOUR CODE> })();"
于 2017-04-26T21:55:21.850 回答