我需要为其父级的弹出窗口设置一些 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;
}
});
});
看到这个小提琴。我的 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 测试)。
建议?