iT邦幫忙

0

android webview 使用getelementbyid 無法取得

我們公司有一個網站 我想做個APP可以快速填寫
網頁都可以使用getelementbyid來做,如下:

document.getElementById("XXX_rmk").value = "123";

進到有框架頁的時候 也找到方法可以取,如下:

var obj = document.getElementById("iframeContainer").contentWindow;
obj.document.getElementById("XXX_rmk").value = "123";

可是當他從這個iframe再次彈跳出一個新的彈跳視窗後就無法取得了
網頁大概是這樣:
A(首頁輸入帳密)->B(主介面)->C(彈跳視窗1)->D(彈跳視窗2)

到C都可以用上面的方法取,到D就不行了,網頁有從B可以直接跳到D的,這個用上面的方法取得到,ID的部分應該是沒有搞錯

麻煩高手指點一下到底是哪裡有問題,GOOGLE了很久還是沒有頭緒,感謝指導。

找到方法了,感動,自己犯蠢寫了些錯誤的方式原地繞了好幾圈

var x = window.frames.length;
var xlength = x-1;
window.frames[xlength].document.getElementById("abc").value="123";

1 個回答

0

只給你一個重點

請注意id是否有重覆名稱,有的話會取不到或是取成物件值。
可善用 f12 大法先查看。

第二個要注意的是,是否在同域名。
不同域名之間的框架,物件操作是禁止的。

看更多先前的回應...收起先前的回應...

不好意思 我看了一下不是很確定 想再問一下
網域名我想應該都是一樣的,ID我有確認過沒有重複
我在comsole那邊看了一下 他的框架名我看到有兩個,如下:
iframeContainer(XXX_detailR.aspx)
iframeContainer(XXX_sign.aspx)
實際上用這個方式都是取到detailR這個

var obj = document.getElementById("iframeContainer").contentWindow;
obj.document.getElementById("XXX_rmk").value = "123";

剛剛試一下,想說那個是不是全名,嘗試用了下面的方法還是不行

var obj = document.getElementById("iframeContainer(XXX_sign.aspx)").contentWindow;
obj.document.getElementById("XXX_rmk").value = "123";

請問一下這樣該如何解決?

https://ithelp.ithome.com.tw/upload/images/20201217/20127077si20f0BVxg.png

把麥咖啡關了先

在F12的開發者模式下,JS裡寫console.log(obj);看看輸出部份是否為undefined

fillano iT邦超人 1 級 ‧ 2020-12-18 11:07:23 檢舉

不是看McAfee給你的框架資訊啦,看起來就不太對XD...你要從開發工具的Elements找正確的框架資訊。(或是在要找的元素上按滑鼠右鍵,然後在選單中選「檢查」)在彈跳裡面開彈跳,他的框架可能是開在彈跳的框架裡,如果你的js放在最外層,那得要找到正確的框架。(看看你使用的popup)

說真的,你也沒很完整的程式碼。
光你的 iframeContainer 本身是幹了啥事也不清楚。

感覺起來你好像不是很清楚了解javascript,變數之間的運行。

本來是想要教你用function的方式來傳送你需要的變數。
一層一層丟回來。
捨棄直接用id讀取參數的方式。

不過看你f12用成這樣。我倒是有點害怕這樣教你。會不會讓你更搞不懂了。

我是用MIT App Inventor想寫個簡單的APP,很簡單就像下面這樣:
https://ithelp.ithome.com.tw/upload/images/20201218/201270777M2Zu6YeiO.png
開發軟體就是有個能用webview RUN JS 的功能
之前寫像上面那樣就可以順利寫進去網頁了,下面紅色箭頭處就是想寫進去的欄位:
https://ithelp.ithome.com.tw/upload/images/20201218/20127077qgby29xwsS.png

按照前輩們的解釋,我盡量得看了一下,實在看不出有其他的IFRAME的ID,我也確定Document的ID沒有寫錯
試了contentDocument也沒用,只有contentWindow對第一個跳出的IFrame有用,第二個跳出來的iframeContainer(XXX_sign.aspx)這個就沒用了,網頁上有另外一個功能可以先呼叫出iframeContainer(XXX_sign.aspx)這個的,指令下去就有用
但是當他第二個才出現的時候就沒用處了T.T

另外還有試了

window.frames[0].document.getElementById("txtbs_rmk").value = "abc";
window.frames[1].document.getElementById("txtbs_rmk").value = "abc";
window.frames[2].document.getElementById("txtbs_rmk").value = "abc";

想說是不是可以不要管他IFRAME的ID 依序取都寫進去(因為網頁裡面的ID不同頁面的也不會有重複),不過還是不行

可以麻煩前輩高手們可以指點一下可行性的方法嗎?

謝謝

fillano iT邦超人 1 級 ‧ 2020-12-19 11:17:02 檢舉

你貼的畫面雖然隱藏了name跟id,但是底下的selector列表還在喔,反過來說,你透過他列出的selector來找看看能不能找到...反正他都幫你列出來了。

不好意思 還是不行 兩個iframe的ID一模一樣 都是會取道第一個
下面是取兩個IFRAME各一個欄位檢查的結果
https://ithelp.ithome.com.tw/upload/images/20201219/20127077QwPYAW2WEr.png

我要發表回答

立即登入回答