Firefox4 / 5 не запускает JS, подключенный к ответу AJAX с использованием библиотеки груши HTML_AJAX - PullRequest
3 голосов
/ 26 июня 2011

Я использую пакет HTML_AJAX в PEAR (по общему признанию, старая библиотека, но она работала хорошо для меня в течение нескольких лет, и я не хочу покидать свою инфраструктуру).

Проблема, которую яу меня есть то, что с появлением Firefox 4, а теперь и Firefox 5, JavaScript, который включен в ответы с использованием HTML_AJAX.replace (div_target, request_page) [API должен заменить div_target ответом из request_page], перестал работать.

Он отлично работает на Chrome, IE9, Android, iPhone и т. Д., Но не на FF4 / 5.

Это какая-то новая функция, механизм безопасности или просто старая ошибка?Если это ошибка, это ошибка HTML_AJAX (то есть вы можете сделать это с помощью jQuery?) Или это нужно исправить в FF?

Пример.

Эта страница существует:

<script type="text/javascript" language="JavaScript">
    function do_replace(){
        HTML_AJAX.replace("something", "index.php?key=value"); // index.php will have html mixed with JS and paste it to the div "something".
    }
</script>
<div id="something" onclick="javascript:do_replace()">This text is to be replaced</div>

И это index.php:

BLA BLA BLA some text maybe a <div> or something
<script type="text/javascript" language="JavaScript">
    alert("this has worked before, but stopped working on FF4&5 still works on Chrome Android etc.");
</script>

Я попытался найти ответ на этот вопрос с помощью поиска, но не смог найти ничего убедительного.Я ценю любую помощь, которую я могу получить в этом.

BR Эрик.

Ответы [ 4 ]

1 голос
/ 13 сентября 2011

Вот как я это решил.

Заменить

    var good_browser = (navigator.product == 'Gecko');

на

    if(navigator.product == 'Gecko'){
        var regex_gb = /Firefox[\/\s](\d+\.\d+)/;
        if(regex_gb.test(navigator.userAgent)){
         var ffversion = new Number(RegExp.$1);
            if(ffversion >= 4){
                var good_browser = false;
            }else{
                var good_browser = true;
            }
        }else{
            var good_browser = true;
        }
    }else{
        var good_browser = false;
    }

в 3 файлах

HTML_AJAX.js
HTML_AJAX_lite.js
util.js.
1 голос
/ 28 июня 2011

Util.setInnerHtml обнаруживает геккона и использует взлом для повышения производительности. Если вы удалите эту проверку, все будет исправлено. Я не уверен, когда у меня будет возможность получить исправления и выпустить их, но это должно быть быстрое изменение.

1 голос
/ 28 июля 2011

Вам нужно установить:

var good_browser = false;

В 3 местах в 3 файлах для его работы.Для меня 3 файла были:

  • HTML_AJAX.js
  • HTML_AJAX_lite.js
  • util.js.

Тогда это работало.

0 голосов
/ 28 июня 2011

У меня та же проблема с пакетом HTML_AJAX в PEAR. Ни один из встроенных тегов скрипта не выполняется Firefox 4 или 5 после вызова AJAX. Мне кажется, что HTML_AJAX нарушает стандарт безопасности HTML5, связанный со встроенными сценариями.

Для Firefox 4 добавление пустого тега в конец файла с тегом скрипта решило проблему, но это был только уродливый обходной путь, который на самом деле был ошибкой в ​​FF4, которая была исправлена ​​для FF5.

Я не хочу менять рамки, но HTML_AJAX сильно отстает от новых. Может быть, мы не нашли реальную проблему.

...