簡體   English   中英

通過UpdatePanel在異步回發后重新加載外部javascript

[英]Reload external javascript after asynchronous postback via UpdatePanel

我的頁面上有一個外部JavaScript,例如:

<script src="http://foo.com/script.js" type="text/javascript"></script>

和某個UpdatePanel。 該腳本會編寫一些內容,並在js文件中的匿名javascript函數中執行此操作。 即,腳本中有類似的東西:

(function(){document.write('content');})();

每當通過異步回發更新UpdatePanel時,腳本所做的一切(或者我的頁面上的任何javascript)都會被撤消。 對於普通的javascript,我只會使用:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(myFunction)

重做所有這些,但由於腳本源文件中的函數是匿名的並且在定義時調用,我是SOL! 有任何想法嗎?

注意:外部js源來自另一個域,其內容不受我的控制。

試試這個

private string _myScript = @"(function (){
                            var ys = document.createElement('script');
                            ys.type='text/javascript'; ys.async=true;
                            ys.src='http://foo.com/script.js';
                            var s = document.getElementsByTagName('script')[0];
                            s.parentNode.insertBefore(ys,s);
                            });";

然后在你的Page_Load中

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myScript", _myScript , true); 

好的,“解決方案”(“臟丑陋的黑客”,如果你願意的話)我提出:

我不是直接加載js文件,而是通過讀取文件的包裝器加載它,將結果包裝在將匿名函數放入全局數組的自定義javascript中,並在加載時和每次異步回發后調用所述數組中的所有函數。

請不要在任何選美比賽中輸入此解決方案。

這里真正的問題是我沒有正確使用UpdatePanels。 如果頁面上所有UpdatePanel的UpdateMode都設置為Conditional,並且您的ScriptManager啟用了部分更新,那么它實際上不應該“[撤消]腳本所做的一切”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM