我有一个非常基本的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");
}
答案 0 :(得分:4)
在我的应用程序中,我使用以下内容并且没有地址栏,JavaScript工作(修改后与您的命名相匹配):
browser = (WebView) findViewById(R.id.webkit);
browser.getSettings().setJavaScriptEnabled(true);
browser.loadUrl("http://site.with.javascript");
我对setWebViewClient
或setWebChromeClient
没有做任何事情,并且按照描述运作。
我认为您的代码存在的问题是您在默认(内部)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> })();"