Android Webview JS互動 自動點選遇到的問題
阿新 • • 發佈:2018-12-11
這篇文章主要是記錄,在webview中實現自動點選按鈕,和內容填充。遇到一些問題,希望能對你有所幫助
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跨域問題
參考: