[問題] 關於 chrome37+ 不支援showModalDialog

作者: no1kk (心中在下雨)   2015-01-09 18:02:23
chrome 在 ver.37 之後開始不支援 window.showModalDialog 這個功能
由於很多原因,所以我被叫去修這個 bug (原程式不是我寫的,而且很龐大)
目前我打算的作法是,當偵測到 typeof(window.showModalDialog) != 'function' 時
用一個功能相同的 function 去取代他
這樣我只需要在一個地方加這些東西,不需要去處理所有用到這個 function 的地方
但是!! 原本的 showModalDialog 功能會將整個程式 hold 在那一行
(類似 alert 或 confirm)
直到 showModalDialog 傳回值為止
我無論用什麼方法,都會變成同步處理,叫出對話框的同時程式已經跑到下一行了
就算後續要執行的工作,我使用 callback 的方式來處理
但是 function 的上一層也已經往後面執行了
例:
var a = function(){
... do something ...
var x = b();
... do something2 ...
return x;
}
var b = function(){
... do something3 ...
window.showModalDialog(....);
... do something4 ...
return value;
}
a();
如上,就算我將 do something4 以 callback 的形式待 showModalDialog 完成後再執行
但是 do something2 已經不會等我的往下做了
所以,是否有辦法讓程式整個 hold 住,等我完成某事後再繼續
還是說,我只能從 showModalDialog 的位置開始往上找
找誰呼叫了 b 然後誰呼叫了 a.... 一直往上 @@
感謝各位!!
作者: mmis1000 (秋月戀楓)   2015-01-09 19:31:00
能用 sync hang 執行住的大概只有 ajax 吧用一個server幫助或許有可能?就用windows open開一個新視窗往server送return value再向server用sync ajax拿回傳值?

Links booklink

Contact Us: admin [ a t ] ucptt.com