Cat*_*tch 9 javascript java android webview
我尝试从android客户端应用程序填写webview中的表单.我知道它应该如何工作,但getElementById总是为我返回null.我在不同的网站上试过.
以下是www.google.com的示例.
MyWebView view = new MyWebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("http://www.google.com");
view.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView v, String url) {
v.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView v, String url) {
v.loadUrl("javascript:document.getElementById('mib').value = 'aaa';");
}
});
setContentView(view);
Run Code Online (Sandbox Code Playgroud)
和MyWebView类(仅供参考).
class MyWebView extends WebView {
Context context;
public MyWebView(Context context) {
super(context);
this.context = context;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// do some multi touch stuff
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我总是得到错误:
09-01 04:35:26.453: I/chromium(2962): [INFO:CONSOLE(1)] "Uncaught TypeError: Cannot set property 'value' of null", source: https://www.google.de/?gws_rd=ssl (1)
Run Code Online (Sandbox Code Playgroud)
但元素"mib"应该在网站上.使用桌面浏览器(带有移动模拟的chrome)一切正常.我不知道,这里出了什么问题.
谢谢你的提示!
编辑:我取得了一些进展.关于这个站点,我还需要setDomStorageEnabled(true).不,我可以找到DOM对象并设置值,但是我没有显示修改后的站点,而是获得了一个只有我设置的值的新空白.例如,带有文字"aaa"的白色空白网站.
Cat*_*tch 33
最后我找到了解决方案!这是一个非常奇怪的行为.
首先,您需要在webview上指定setDomStorageEnabled(true).否则DOM不起作用.我想知道为什么没有教程给出一个暗示.但是没问题.
myview.getSettings().setDomStorageEnabled(true);
Run Code Online (Sandbox Code Playgroud)
在此之后,我结束了一个白色的空白页面,只有我设置的值.奇怪的是,它javascript:document.getElementById('myfield').value = 'aaa';返回一个值.就是我设定的那个.因此创建了一个仅包含字符串"aaa"的新空白页面.
我通过修改javascript来抛弃返回结果来解决它:
javascript:var x = document.getElementById('myfield').value = 'aaa';
Run Code Online (Sandbox Code Playgroud)
瞧.这是工作.
Ste*_*nca 11
我也在这个问题上挣扎了很长一段时间.我和@Catscratch的空白页面有同样的问题,没有任何效果.奇怪的是,如果你在Javascript函数中包含相同的代码,那一切都有效.
从而,
webView.loadUrl("javascript:(function() { document.getElementById('email_field').value = '" + email + "'; })()");
Run Code Online (Sandbox Code Playgroud)
工作,而
webView.loadUrl("javascript:document.getElementById('email_field').value = '" + email + "';");
Run Code Online (Sandbox Code Playgroud)
不起作用.
所有这一切都没有必要setDomStorageEnabled(true)和没有setWebChromeClient()
| 归档时间: |
|
| 查看次数: |
15213 次 |
| 最近记录: |