Вставьте скрипт в DOM, который вызывает AJAX - PullRequest
0 голосов
/ 14 июля 2010

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

Часть кода (виджет) должна быть вставлена ​​в DOM, а не жестко закодирована в html.Я использую jquery, чтобы сделать это.Проблема в том, что он в конечном итоге перенаправляет страницу ...

Мне нужно решить эту проблему.

Вот пример.Создайте страницу со следующим:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
<script type="text/javascript">
    $(function(){

       $('#doInsertW').click(function(){
          var wCode = $('#inputWidget').val();
          $('#putWidget').html(wCode);
       });

    });
</script>
<input id="inputWidget" /><button id="doInsertW" type="button">Insert</button>
<div id="putWidget"></div>

Затем вставьте это в поле ввода, и вы поймете, что я имею в виду:

<script src="http://widgets.twimg.com/j/2/widget.js"></script>
<script>
new TWTR.Widget({
  version: 2,
  type: 'profile',
  rpp: 4,
  interval: 6000,
  width: 250,
  height: 300,
  theme: {
    shell: {
      background: '#333333',
      color: '#ffffff'
    },
    tweets: {
      background: '#000000',
      color: '#ffffff',
      links: '#4aed05'
    }
  },
  features: {
    scrollbar: false,
    loop: false,
    live: false,
    hashtags: true,
    timestamp: true,
    avatars: false,
    behavior: 'all'
  }
}).render().setUser('twitter').start();
</script>

1 Ответ

1 голос
/ 14 июля 2010

Проблема в том, что скрипт widget.js использует document.write для размещения HTML-кода виджета на странице. Если document.write вызывается во время загрузки страницы, она работает нормально. Однако вызов document.write после завершения загрузки страницы приведет к перезаписи всей страницы.

Вот быстрый и грязный хак, который заставит его работать (протестировано в FireFox):

$(function(){
    document.write = function(c) { $('#putWidget').append(c) };

   $('#doInsertW').click(function(){
      var wCode = $('#inputWidget').val();
      $('#putWidget').html(wCode);
   });

});

Обратите внимание, я просто перезаписываю функцию document.write после загрузки страницы.

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