繁体   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