2011-06-10 103 views
0

我在維護使用框架/框架的舊網站。找不到框架兒童

我不想附加處理程序到主框架,所以當用戶點擊身體某處會彈出警報。

我一直在打我的頭一陣子,但現在我覺得我如此親密,我可以品嚐它,但我仍然無法弄清楚問題所在。我正在使用jQuery 1.5.1。

$(function() { 
    $($('frame[name="main"]')).ready(function() { 
     console.log($('frame[name="main"]')); // this is a success (I can view it in firebug 
     console.log($('frame[name="main"]').find('body')); // fails (nothing is found) 
    }); 
}); 

這裏是幀

<frameset cols="190,*" frameborder="no" border="0" framespacing="0" framepadding="0" marginwidth="0" marginheight="0"> 
    <frame name="head" src="someHTMLPage1.html" scrolling="no" noresize frameborder="no" border="0" framespacing="0" framepadding="0" marginwidth="0" marginheight="0"> 
    <frame name="main" src="someHTMLPage2.html" scrolling="auto" frameborder="no" border="0" framespacing="0" framepadding="0" marginwidth="0" marginheight="0"> 
</frameset> 

回答

0

感謝阿圖羅,

你的解決方案幫助,但並不完美。這就是我所做的。

$(function() { 

    $($('frame[name="info"]')).load(function() { 
     var doc = window.frames["info"].document; 
     doc.onclick = function() { alert('something') }; 
    }); 
}); 

我不得不使用.load代替.ready爲了這個工作。

這個工作在IE 7/8/8兼容模式和FF4和Chrome 12(可能在早期版本的FF和Chrome瀏覽器,我只是沒有測試)

0

首先,jQuery的準備不窗口它是專爲文件很好地工作。一個框架封裝了一個窗口。

另外我認爲你需要加載jquery在你的框架內的頁面來找到身體。 嘗試不jQuery的

var doc = window.frames["main"].document; 
var bdy = doc.body; 
bdy.onclick = function() { alert("your text here") };

也可以影響你的是,如果你在框架頁面不在同一個域中框架的另一件事。這將阻止框架集中的任何腳本。你

也可以改變加載的,而不是現成

$($('frame[name="main"]')).load(function() { ...

+0

與它添加到的問題頁面內的頁面是這個頁面不斷與其他頁面的LOTS交換。如果可能的話,我希望避免在每一頁上都有處理程序。 – Darcy 2011-06-10 14:33:11

+0

這些頁面是否位於框架集的相同域中? – 2011-06-10 14:35:29

+0

@ Arturo:是的,他們是 – Darcy 2011-06-10 14:39:28