Javascript добавление тега <script> после загрузки страницы

0

Здесь была небольшая проблема. В принципе, я пытаюсь добавить тег скрипта после загрузки страницы.

Это то, что я делаю:

index.php:

<html>
<head>
   <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
   <script>
   function getad()
   {
        $.post('assets/getad.php', "ad", function(response) {
            response = response.replace('document.write','document.getElementById("ad").innerHTML = ');
            eval(response);
            console.log(response);
        });
   }
   getad();
   </script>    
<div id="ad"></div>
</body>
</html>

getad.php:

<?php
    echo file_get_contents("http://ads1.qadabra.com/t?id=a823aca3-9e3c-4ddd-a0cc-14b497cad85b&size=300x250");
?>

Демо можно найти здесь: http://dev.cj.gy/game/

Как вы можете видеть, #ad div ДОЛЖЕН заполняться правильным тегом скрипта, но он фактически не запускается. Если я отредактирую страницу, чтобы включить тег скрипта прямо на загрузке страницы, он запускается.

  • 0
    Казалось бы, это идеальное место для использования jQuery.getScript() , поскольку вы, похоже, уже используете его.
  • 0
    Дело в том, что я изменяю скрипт перед тем, как запустить его. Я изменяю document.write, чтобы просто установить HTML для рекламы. Ответ также является динамическим, поэтому сценарий меняется каждый раз.
Показать ещё 2 комментария
Теги:

1 ответ

0

Да, теги <script> вызывают выполнение при анализе как часть основного документа; они не выполняются из записи в innerHTML.

Вы можете создать исполняемый скриптовый элемент за пределами этого начального синтаксиса, используя метод DOM вызова createElement('script'), установив его src/content и добавив его в документ. Это то, что делает jQuery getScript.

Однако это не принесет вам много пользы, потому что следующий скрипт, который ads1.qadabra.com является document.write на странице, также сам вызывает document.write.

Вы можете обойти оба этих вызова на стороне клиента (т.е. без getad.php), назначив свою собственную настраиваемую функцию document.write чтобы вместо записи на страницу загрузки пытались извлечь источник сценария тег, переданный ему, и загрузить его в созданный DOM-элемент.

Но в целом это сценарии, предназначенные для работы синхронно во время загрузки документа; все, что вы делаете, чтобы заставить их работать так, как они не были предназначены, скорее всего, будет хрупким и перестанет работать, когда рекламная сеть что-то изменит.

Если вы хотите загрузить стороннее объявление без приостановки загрузки родительского документа, я предлагаю разместить его в iframe.

  • 0
    Я полностью заменяю document.write, так что это не проблема ... Как мне создать новый DOM?
  • 0
    var s = document.createElement('script'); s.src = extracted_script_url; document.getElementsByTagName('head')[0].appendChild(s) или в jQuery $.getScript(extracted_url) . Но я не думаю, что это хорошая идея.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню