我需要为其父级的弹出窗口设置一些contextData。我尝试这样:
var some contextData = {};
$(function() {
$('#clickme').click(function() {
var w = window.open('http://jsfiddle.net');
w.contextData = contextData
//w.context data is null in the popup after the page loads - seems to get overwritten/deleted
});
});
它不起作用,所以我下一个想法是,等到内容加载完毕
var some contextData = {};
$(function() {
$('#clickme').click(function() {
var w = window.open('http://jsfiddle.net');
w.onload = function() {
//Never Fires
w.contextData = contextData;
}
});
});
请参见this fiddle。我的onload方法从不触发。
这有效:
var some contextData = {};
$(function() {
$('#clickme').click(function() {
var w = window.open('http://jsfiddle.net');
setTimeout(function(){
if(w.someVariableSetByThePageBeingLoaded) {
w.contextData = contextData;
}
else{
setTimeout(arguments.callee, 1);
}
}, 1);
});
});
但是存在明显的优雅问题(但目前尚在解决)。
我知道您可以采用另一种方法(已将弹出式调用返回到打开器/父代上的方法,但这迫使我保持某种查找上下文的方式(并且我必须将上下文的键传递给位于查询字符串)。当前的方法使我可以在闭包中捕获上下文,这使我的弹出窗口可重复使用。
我不尝试跨域执行此操作-父级和弹出窗口都在同一个域中,尽管父级是iframe(很难用jsfiddle进行测试)。
有什么建议吗?
最佳答案
如果您使用iframe进行此操作,请尝试这种方式
的HTML
<button id="clickme">Click Me</button>
<iframe id="framer"></iframe>
Java脚本
$(function() {
$('#clickme').click(function() {
$("#framer").attr("src","http://jsfiddle.net");
$("#framer")[0].onload = function(){
alert('loaded');
};
});
});
我更新了您的jsfiddle http://jsfiddle.net/HNvn3/2/
编辑
由于以上内容是完全错误的,这可能会为您指明正确的方向,但需要在实际环境中对其进行尝试以查看其是否有效。
全局变量
frames
应该设置,如果window.open("http://jsfiddle.net","child_window");
frames["child_window"]
可能引用另一个窗口在jsfiddle中尝试时出现了JavaScript访问错误-因此这可能是正确的选择
编辑2
在我的本地开发箱上试用后,我能够完成这项工作
var w = window.open("http://localhost");
w.window.onload = function(){
alert("here");
};
alert()
发生在父窗口中