2015-05-22 49 views
1

我試圖使用純Javascript(無jQuery)循環瀏覽頁面上的每個iframe,然後檢查是否有任何iframe包含高亮(選定)文本。然後顯示一個顯示突出顯示文本的警報。踢球者是...內部框架的ID將不會提前知道。因此需要遍歷每個iframe。僅供參考 - 內聯框架全部位於同一個域中,因此不存在跨域問題。獲取任何iframe中的選定文本

我認爲我的代碼非常接近我所需要的,但沒有雪茄到目前爲止。

在頁面加載,我這樣做...

var iframes = document.getElementsByTagName('iframe'); 
for (var i = 0; i < iframes.length; i++) { 
    iframes[i].contentWindow.document.onmouseup = function() { 
     var iframeSelection = iframes[i].contentWindow.document.getSelection(); 
     if (iframeSelection.toString().length > 0) { alert(iframeSelection); } 
    } 
} 

而且......對於這個特定的項目,只需要在Chrome工作。

謝謝!

+0

嘗試沒有 「contentWindow」:EX 變種iframeSelection = iFrame的[I] .document.getSelection(); 另外,我相信你需要在「窗口」而不是文檔上運行getSelection。 – Bioto

+0

謝謝,但這不是問題,因爲我已經(成功)通過使用getElementById(使用contentWindow,document等)獲取所選文本在* single * iframe中。當頁面上有_multiple_ iframe時,無法知道如何做到這一點。 – JustAnotherCoder

回答

0

你的iframe和選擇代碼是好的,但你正在運行到一個common JavaScript mistakefor循環 - i永遠是由事件處理函數運行的時間等於iframes.length

可以避免通過與Array.prototype.forEach迭代:

var iframes = document.getElementsByTagName('iframe'); 

[].forEach.call(iframes, function(frame) { 
    frame.contentWindow.document.onmouseup = function() { 
     var iframeSelection = frame.contentWindow.getSelection(); 
     if (iframeSelection.toString().length > 0) { alert(iframeSelection); } 
    } 
}); 

JSBin

+0

我從來不會想到我自己。非常感謝joews ......非常棒! :) – JustAnotherCoder