作者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