我需要从其父窗口为弹出窗口设置一些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测试)。
建议?
答案 0 :(得分:1)
如果您使用iframe执行此操作,请尝试这种方式
HTML
<button id="clickme">Click Me</button>
<iframe id="framer"></iframe>
的Javascript
$(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访问错误 - 所以这可能是正确的轨道
<强> EDIT2 强>
尝试我的本地开发盒我能够完成这项工作
var w = window.open("http://localhost");
w.window.onload = function(){
alert("here");
};
父窗口中发生了alert()