我想要抓取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>
你先確定是什麼undefined。先說:getElementsByTagName是DocumentElement的方法,不是window的。你應該先取得contentWindow,然後透過他取得document,然後才使用document的getElementsByTagName方法。
例如:
$('#abgne_iframe').on('load', function() {
console.log(this.contentWindow.document.getElementsByTagName('meta')[4].getAttribute('content'));
});
fillano 前輩
您說的方式我有用過,但在目標網頁依舊不行執行
document.getElementById("abgne_iframe").contentWindow.document.getElementsByTagName('meta')[4].getAttribute('content');
請問您之前有碰過無法擷取的情況嗎?
...所以是contentWindow就抓不到?你手動在developer console跑看看。另外,你確定是同一個網域?看起來你是用html透過iframe包裹一個網站(redmine?),也許該確認一下,他是否有送這個標頭:X-Frame-Options 回應標頭
fillano 前輩
不管是.contentWindow還是window.frames後面接getElementsByTagName都是無法取值的,除了跟上面提到的下載後取值卻是可以的,至於X-Frame-Options我想是沒有的。