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