iT邦幫忙

0

JS 抓取iframe裡面特定元素的content,卻無法抓取或undefined(確定有東西)。

Damocles 5 月前3214 瀏覽

我想要抓取iframe裡面指定元素的content,參考過網路上許多教學的寫法,但是抓取出來卻是undefined或者錯誤沒有執行,有沒有好心人可以指導一下呢
註:都是同一個網域下!!

----2016/12/07/17:23更新----
剛剛測試把iframe目標的html下載到我的網頁裡面,iframe路徑更改後,再執行一次就可以抓到我指定的值了,代表我的程式碼是沒有問題的,不過並沒有實際解決問題(因為目標還是那個網頁)

<script type="text/javascript">
    $(function () {
        $('#abgne_iframe').on("load", function () {
        //jq寫法
        //var $iframe = $(this);
        //$contents = $iframe.contents();        
        //$("input[name='authenticity_token']").val($contents.find('input[name="authenticity_token"]').attr('content'));            
        
        //js寫法
         //var a = document.getElementById("abgne_iframe").contentWindow;  
         //可以抓到iframe視窗寫法1
         var a=window.frames["abgne_iframe"];  //可以抓到iframe視窗寫法2
         //window.frames["abgne_iframe"].document.getElementsByName("csrf-token")[4]..getAttribute("content");  
         //理論上可以抓到iframe裡面的值,但是實際上不行...

         //var b = window.frames["abgne_iframe"].getElementsByTagName("meta")[4].getAttribute("content");
            var test = a.getElementsByTagName("meta")[4].getAttribute("content");            
            alert(test);
            alert("success");

        });
    });
</script>

http://ithelp.ithome.com.tw/upload/images/20161207/20103670x3nxnpOWGh.jpg

2 個回答

0
鄭小安
iT邦新手 5 級 ‧ 5 月前

同網域嗎?

Damocles iT邦新手 5 級 ‧ 5 月前 檢舉

是的

3
fillano
iT邦超人 1 級 ‧ 5 月前

你先確定是什麼undefined。先說:getElementsByTagName是DocumentElement的方法,不是window的。你應該先取得contentWindow,然後透過他取得document,然後才使用document的getElementsByTagName方法。

例如:

$('#abgne_iframe').on('load', function() {
    console.log(this.contentWindow.document.getElementsByTagName('meta')[4].getAttribute('content'));
});
Damocles iT邦新手 5 級 ‧ 5 月前 檢舉

fillano 前輩
您說的方式我有用過,但在目標網頁依舊不行執行

document.getElementById("abgne_iframe").contentWindow.document.getElementsByTagName('meta')[4].getAttribute('content');

請問您之前有碰過無法擷取的情況嗎?

fillano iT邦超人 1 級 ‧ 5 月前 檢舉

...所以是contentWindow就抓不到?你手動在developer console跑看看。另外,你確定是同一個網域?看起來你是用html透過iframe包裹一個網站(redmine?),也許該確認一下,他是否有送這個標頭:X-Frame-Options 回應標頭

Damocles iT邦新手 5 級 ‧ 5 月前 檢舉

fillano 前輩
不管是.contentWindow還是window.frames後面接getElementsByTagName都是無法取值的,除了跟上面提到的下載後取值卻是可以的,至於X-Frame-Options我想是沒有的。

我要發表回答

立即登入回答