Re: [討論] 不同視窗之間的callback

看板Ajax作者 (dk)時間13年前 (2012/09/29 09:36), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1GPb2Y-H (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1GPb2Y-H (Ajax)