作者lovdkkkk (dk)
看板Ajax
标题Re: [讨论] 不同视窗之间的callback
时间Sat Sep 29 09:36:31 2012
※ 引述《JYHuang (夏天到了,冷不起来了说)》之铭言:
: 有一些callback的概念一直搞不清
: 虽然有点像是scope的概念,但好像又不属於scope的范筹。
: 因为我要写的又牵涉到不同视窗之间的"领域"。
: 拿具体一点的例子来说
: 有两个分别叫TW和JP的视窗,里面都有个<div id='country'></div>。
: TW下是 <div id="country">TAIPEI</div>
: JP下是 <div id="country">TOKYO</div>
: 今天如果TW派了一个人到JP去(TW下开一个视窗JP)
: 然後用叫他在JP用callback的方式 去取得 #country的值
: TW
: function callback(callback){
: if ($.isfunction(callback)
: callback();
: }
: JP
: parent.callback(function (){
: alert($("#country").text());
: })
: 我试过的结果是 TOKYO
: 所以callback是会先在JP里,把JQuery的东西先转换好成为变数再搬到TW下里执行
: $("#country")是实体的物件、而不是变数所以不会牵涉到scope?
: 而不是我原先所想的,把整套function搬到TW来执行,
: 然後再TW的情境下去把$("#country")物件化。
: 类似eval()那样..
: 是这样吗?
: 这种情况下似乎也不能用$.proxy()来解决嘛?
所有当下的变数会 copy 过去, 以你的例子来说是 document,
在 TW 里跑的时候会使用 JP 的 document,
如果要等跑的时候再决定的话, 就把它做成可以传入变数的方式
也可以不要 callback 直接从子视窗拿所有父视窗的东西,
ex
父:
window.execute = function (callback) {
callback(document);
}
setTimeout(function () {
window.open('popup.html', '_blank');
}, 1000);
子:
window.opener.execute(function (doc){
alert(doc.getElementById('content').innerHTML);
alert(window.opener.document.getElementById('content').innerHTML);
});
以上都限同 domain
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.2.87