今天工作上遇到,以下做個分享
問題:
A視窗傳FunName給B視窗,然後B視窗去執行A視窗FunName的Function
A.aspx
window.open(B.aspx?FunName=Test);
B.aspx
opener.[FunName]();
各位發現問題了嗎?
B視窗要怎麼將字串內的文字當成指令/Function執行呢?
解法1:
使用setTimeout去執行(setTimeout用法請自行查)
setTimeout("opener." + FunName+ "();",10);
.
.
.
這樣就可以去執行A視窗的Function
但問題來了
如果接下來動作是在A視窗的Function執行完成後才能繼續做
但因為
setTimeout是非同步執行
那最後資料就會不正確
更可能直接Error給你看
這時候該怎麼辦呢?
解法2:
先將完整指令存成字串,再用Eval()去執行
var strFun = "opener." + FunName+ "();";
Eval(strFun);
.
.
.
這樣就會執行完A的Function再執行下面動作
對此問題而言
以上2種方法都可以達到執行字串內javascript指令的動作
差別在於
setTimeout 同時並行、節省執行時間
Eval 執行延續、錯誤排除方便
以上提供給大家參考
回aspnet目錄
回首頁
沒有留言 :
張貼留言