Перезагрузить внешний javascript после асинхронной обратной передачи через UpdatePanel - PullRequest
3 голосов
/ 01 декабря 2009

У меня есть внешний javascript на моей странице, например, что-то вроде:

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

и панель обновлений где-то. Сценарий записывает некоторый контент и делает это из анонимной функции javascript в файле js. Т.е. в сценарии есть что-то вроде этого:

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

Всякий раз, когда UpdatePanel обновляется посредством асинхронной обратной передачи, все, что делал скрипт (или любой JavaScript на моей странице, в этом отношении), отменяется. Для обычного JavaScript я бы просто использовал:

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

чтобы повторить все это, но так как функция в исходном файле скрипта является анонимной и требует определения, я SOL! Есть идеи?

Примечание: внешний источник js находится в другом домене, и его содержимое не находится под моим контролем.

Ответы [ 3 ]

3 голосов
/ 28 июня 2012

Попробуйте это

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); 
2 голосов
/ 04 января 2010

Хорошо, «решение» («грязный, некрасивый хак», если хотите) я придумал:

Вместо прямой загрузки файла js, я загружаю его через оболочку, которая читает файл, оборачивает результат в пользовательский javascript, который помещает анонимную функцию в глобальный массив, и вызывает все функции в указанном массиве после загрузки и после асинхронная обратная передача.

Пожалуйста, не вводите эти решения ни в каких конкурсах красоты.

1 голос
/ 27 декабря 2010

Настоящая проблема здесь заключалась в том, что я неправильно использовал UpdatePanels. Если для UpdateMode всех UpdatePanels на вашей странице установлено значение Conditional, а в ScriptManager включено частичное обновление, ему действительно не следует «[отменять] все, что делал скрипт».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...