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

看板Ajax作者 (夏天到了,冷不起來了說)時間13年前 (2012/09/28 13:21), 編輯推噓1(1016)
留言17則, 5人參與, 最新討論串1/2 (看更多)
有一些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

09/28 20:59, , 1F
這是closure 所以JP呼叫parent.callback傳進去的
09/28 20:59, 1F

09/28 21:00, , 2F
function (){ alert($("#country").text()); })
09/28 21:00, 2F

09/28 21:02, , 3F
是在JP的scope下 所以引用到的是 JP的window.document
09/28 21:02, 3F

09/28 21:06, , 4F
$("#country")的內容是從window.document.getElementById來
09/28 21:06, 4F

09/28 21:08, , 5F
的 所以會得到JP的document
09/28 21:08, 5F

09/28 21:21, , 6F
另外你打算用$.proxy解決什麼? 你是打算得到TW的答案嗎?
09/28 21:21, 6F

09/29 00:11, , 7F
嗯..我的想法是在子視窗的script處理父視窗的元件
09/29 00:11, 7F

09/29 00:55, , 8F
我不太懂你問題的描述..
09/29 00:55, 8F

09/29 00:56, , 9F
這個視窗是window,還是單純的不同 div 作 popup效果而已?
09/29 00:56, 9F

09/29 07:14, , 10F
真的popup視窗 or iframe
09/29 07:14, 10F

09/29 11:48, , 11F
function (){
09/29 11:48, 11F

09/29 11:49, , 12F
alert($("#country",parent.document).text());
09/29 11:49, 12F

09/29 11:50, , 13F
}) 改成這樣就好了吧 $()可以指定用哪個document
09/29 11:50, 13F

09/29 12:38, , 14F
呼叫函式是把控制權轉移給它,
09/29 12:38, 14F

09/29 12:38, , 15F
不是拉過來執行, 是跳過去, 完成再跳回來,
09/29 12:38, 15F

09/29 12:38, , 16F
而函式執行時是在自己的context之中
09/29 12:38, 16F

09/29 13:08, , 17F
試試HTML5的postMessage?
09/29 13:08, 17F
文章代碼(AID): #1GPJFCmV (Ajax)
文章代碼(AID): #1GPJFCmV (Ajax)