Android Webview-在页面加载完成后使用Javascript更改元素
我想在Web视图中使用Javascript更改HTML页面上的一些值。 在页面加载完成后,我尝试了许多不同的方法来评估Javscript 这是我的密码:Android Webview-在页面加载完成后使用Javascript更改元素,javascript,android,dom,webview,Javascript,Android,Dom,Webview,我想在Web视图中使用Javascript更改HTML页面上的一些值。 在页面加载完成后,我尝试了许多不同的方法来评估Javscript 这是我的密码: webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setDomStorageEnabled(true); webview.getSettings().setBlockNetworkImage(false); webvi
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setBlockNetworkImage(false);
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
webview.loadUrl("javascript:(function() { document.getElementById('options').value = '" + found.getId() + "'; ;})()");
button.performClick();
}
});
我认为这意味着,在页面完全加载之前,该方法被提前调用。
你有什么想法吗?为了使用javascript(也称为DOM操纵)更改HTML中的值/内容/样式,我们需要等待DOM就绪或完全加载。在这种情况下,我们将页面加载到widgetWebView中,然后执行我们的业务 我有一个示例代码,我总是在相同的情况下使用
。。。
最终字符串url=”http://example.com";
最终网络视图网络视图=findViewById(R.id.my_网络视图);
最后一个字符串myNewValue=“它有效!”;
webview.getSettings().setJavaScriptEnabled(true);
setWebChromeClient(新的WebChromeClient());
setWebViewClient(新的WebViewClient(){
@凌驾
公共void onPageFinished(WebView视图,字符串url){
//您的自定义javascript在这里
字符串myCustomJS=“document.getElementById('options')。innerHTML=”+
myNewValue+“'”;
//这里我们执行javascript代码
loadUrl(“javascript:(function(){“+myCustomJS+”})()”;
}
});
//这里我们加载url
loadUrl(url);
...
我希望上面的代码能帮助你继续工作
等待DOM就绪的更新 如果您以前使用过jQuery,那么您必须知道
// example 1: jQuery way
$(document).ready(function() {
// place our logic here
});
// example 2: native javascript way
document.addEventListener('DOMContentLoaded', function() {
// place our logic here
});
在DOM就绪后,Im使用此技巧在WebView中操纵页面(在示例2中原生JS方式)
另一个问题为什么不使用runnable
因为我们从不知道互联网速度的用户,假设我们将runnable设置为等待3000ms
或3sec
,但web在runnable执行后没有响应接下来发生了什么?用户将有一个白色的空白屏幕并继续等待
希望这一点现在更清楚
参考链接:谢谢你的想法。我以后再试试。但是你的代码有什么不同呢?@SimonLiebers我上面的代码也叫WebChromeClient,可能对你有帮助。如果您只想加载web url,那么WebViewClient就足够了。但在很多情况下,我总是面临着同样的问题,当我的自定义JS在互联网上多次搜索后无法使用WebViewClient时。最后我发现了为什么我的自定义JS不起作用,然后我只把WebChromeClient称为magic。对不起,我的英语很差。对我来说,它不会改变任何事情。但是如果我在处理程序中调用javascript,经过延迟后,它就会工作@伊恩cikal@SimonLiebers关键是我们在DOM就绪后等待,之后我们可以使用JS以多种方式操作它。或者在您的例子中,将值从Android发送到WebView,Ok是有意义的,但我如何才能等待DOM呢@伊恩·西卡尔