作者JYHuang (夏天到了,冷不起来了说)
看板Ajax
标题[讨论] 不同视窗之间的callback
时间Fri Sep 28 13:21:14 2012
有一些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()来解决嘛?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 112.104.193.42
1F:→ sk1765:这是closure 所以JP呼叫parent.callback传进去的 09/28 20:59
2F:→ sk1765:function (){ alert($("#country").text()); }) 09/28 21:00
3F:→ sk1765:是在JP的scope下 所以引用到的是 JP的window.document 09/28 21:02
4F:→ sk1765:$("#country")的内容是从window.document.getElementById来 09/28 21:06
5F:→ sk1765:的 所以会得到JP的document 09/28 21:08
6F:→ sk1765:另外你打算用$.proxy解决什麽? 你是打算得到TW的答案吗? 09/28 21:21
7F:→ JYHuang:嗯..我的想法是在子视窗的script处理父视窗的元件 09/29 00:11
8F:→ TonyQ:我不太懂你问题的描述.. 09/29 00:55
9F:→ TonyQ:这个视窗是window,还是单纯的不同 div 作 popup效果而已? 09/29 00:56
10F:→ JYHuang:真的popup视窗 or iframe 09/29 07:14
11F:→ sk1765:function (){ 09/29 11:48
12F:→ sk1765: alert($("#country",parent.document).text()); 09/29 11:49
13F:→ sk1765:}) 改成这样就好了吧 $()可以指定用哪个document 09/29 11:50
14F:推 ChowMein:呼叫函式是把控制权转移给它, 09/29 12:38
15F:→ ChowMein:不是拉过来执行, 是跳过去, 完成再跳回来, 09/29 12:38
16F:→ ChowMein:而函式执行时是在自己的context之中 09/29 12:38
17F:→ b12031106:试试HTML5的postMessage? 09/29 13:08