Загрузка внешнего js в IE

#javascript #internet-explorer

#javascript #internet-explorer

Вопрос:

Я хочу загрузить внешний файл javascript, но я не могу использовать AJAX-запросы из-за той же политики происхождения, и у меня есть код:

 <script type="text/javascript">
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = 'test.js';
    head.appendChild(script);
</script>
  

Это нормально везде (Firefox, Chrome, Opera, IE9, IE6), но не в IE8, IE7.
Как я могу заставить это работать в IE8?

Комментарии:

1. это зависит от того, куда вы вставили этот код, смотрите второй пункт здесь kodeplay.com/2011/04/best-practices-for-ie

Ответ №1:

Как насчет старого document.write('<script language="javascript" src="test.js"></script>') . Также вам не нужно добавлять к, head вы можете использовать body к.

Комментарии:

1. p.s. </script> -> </script> чтобы избежать ошибки ‘unterminated string literal’

Ответ №2:

Попробуйте прочитать о JsonP 🙂

Ответ №3:

Я не уверен, почему у вас возникли проблемы в IE, но следующее работало в Firefox 4, IE6 и IE9 (то есть в доступных мне браузерах):

 <html>
<head>

</head>
<body>
    <script type="text/javascript">
        var head = document.getElementsByTagName('head')[0];
        var script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js';
        head.appendChild(script);

        var interval = window.setInterval(function() {
            if (typeof($) !== "undefined") {
                $("<p>it worked!</p>").appendTo(document.body);
                window.clearInterval(interval);
            }
        }, 100);
    </script>

</body>
</html>
  

Комментарии:

1. фактически, ваше решение такое же, как в моем вопросе, и не работает в IE7 и IE8

2. нет, это не так. он ожидает, пока js не будет загружен, а затем использует его. в моих тестах это работало в ie6 .

3. да, вы правы. Дело в том, что я использовал «IE Tester», и, похоже, он неверно реализует IE7 и IE8, так что с вашим ответом тоже все в порядке, но я не могу выполнить несколько отправок. Итак, по крайней мере, я проголосовал за.

4. да, у меня были те же проблемы с ie tester. обычно я просто предполагаю, что если он работает в ie6 и последней версии, он будет работать и в промежуточных. вероятно, это безопасное предположение для 99% случаев.