代码之家  ›  专栏  ›  技术社区  ›  Mechlar

在调用AJAX的DOM中插入一个脚本

  •  0
  • Mechlar  · 技术社区  · 16 年前

    我们有一个工具,允许人们添加代码到一个动态页面。

    一些代码(小部件)需要注入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 回复  |  直到 15 年前
        1
  •  1
  •   Mark Eirich    16 年前

    问题是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);
       });
    
    });