Android Webview JS交互 自动点击遇到的问题

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/xx326664162/article/details/82809507

这篇文章主要是记录,在webview中实现自动点击按钮,和内容填充。遇到一些问题,希望能对你有所帮助

Webview 与 JS交互:

Webview 与 JS交互,可以查看这篇文章Android:你要的WebView与 JS 交互方式 都在这里了

下面的JS代码实现的功能是:点击帐号登陆,输入账号密码,登陆

String js = "javascript:{document.getElementById('switcher_plogin').click();" +
                "document.getElementById('u').value = '" + QQ + "';" +
                "document.getElementById('p').value='" + pwd + "';" +
                "document.getElementById('login_button').click();};";

在 Android 应用的webview中始终报错,

报错:

Uncaught TypeError: Cannot read property 'click' of null

找不到switcher_plogin这个控件,但是在网页能看到这个控件

网上看了很多答案,大部分说是添加下面的代码

WebSettings settings = webView.getSettings();
settings.setDomStorageEnabled(true);

但是我添加了,这个设置后,依旧是没有效果

分析:

问题一:

在网页端使用上面的js代码,可以实现想要的效果。但是需要在console中选择对应的iframe,否则也是出现同样的错误
在这里插入图片描述

我把这个网址在postman请求一下,看到返回的代码,果然是没有switcher_plogin,但是界面上有显示这个控件。是因为这个iframe是在另一个网址请求返回的。

解决:

每一个iframe都有一个window对象,也就有document对象,想对其中的控件进行操作,就需要这个document。

那顺理成章就应该是获取这个iframe的document,进行操作

window.frames["iframe的name值"].document.getElementById("iframe中控件的ID").click();  

问题二:

在获取到控件后,在执行click()操作,报错了

在这里插入图片描述

Uncaught DOMException: Blocked a frame with origin "https://graph.qq.com" from accessing a cross-origin frame.
    at <anonymous>:1:56

因为这个iframe和主界面的,不同源,所以互相不能进行访问,这是浏览器进行的限制

解决:

因为这个html和js文件,我无法修改,所以想通过这种方式实现我的需求,是不可能了。打算换一种思路,Android 基于坐标的模拟点击等

如果你可以修改html和js文件,通过跨域,是可以实现需求的。可参考这篇文章详解js跨域问题

参考:

[疑难杂症] Android WebView 无法打开天猫页面
Enabling general JavaScript in WebViewClient
WebView, problems with JavaScript clicking button
详解js跨域问题
Android Webview: “Uncaught TypeError: Cannot read property ‘getItem’ of null”
Android:你要的WebView与 JS 交互方式 都在这里了

关于window和document 及iframe

Js/Jquery获取iframe中的元素

猜你喜欢

转载自blog.csdn.net/xx326664162/article/details/82809507
今日推荐