我正在维护一个使用框架集/框架的旧网站。
我不想将处理程序附加到主框架上,因此当用户在某处点击主体时会弹出一个警告。
我一直在敲我的头一段时间,但我现在感觉我已经如此接近我可以品尝它,但我仍然无法弄清楚问题。我正在使用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 :(得分:0)
首先,jquery ready对于为文档设计的窗口不能很好地工作。框架封装了一个窗口。
另外我认为您需要在框架内的页面上加载jquery来查找正文。 尝试不用jQuery
var doc = window.frames["main"].document;
var bdy = doc.body;
bdy.onclick = function() { alert("your text here") };
另一件也会影响到你的事情是框架中的页面与框架集不在同一个域中。这将阻止框架集中的任何脚本。
您也可以更改为加载而不是准备好
$($('frame[name="main"]')).load(function() { ...
答案 1 :(得分:0)
感谢Arturo,
您的解决方案有所帮助,但并不完美。这就是我所做的。
$(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,我只是没有测试)