Что происходит, когда вы используете JavaScript для вставки виджета JavaScript? - PullRequest
0 голосов
/ 27 октября 2010

Кто-нибудь может объяснить, что происходит, когда вы используете javascript для вставки виджета на основе javascript?

вот мой код js:

var para = document.getElementsByTagName("p");
var cg = document.createElement("div");
cg.setAttribute("class", "twt");
cg.innerHTML='<a href="http://twitter.com/share" class="twitter-share-button" 
data-count="vertical" data-via="xah_lee">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>';
document.body.insertBefore(cg, para[1]);

он вставляет виджет twitter перед первым абзацем.Как вы можете видеть выше, виджет твиттера вызывает javascript, который показывает, сколько раз страница была написана в Твиттере.

не работает в Firefox, Chrome, но частично работает в IE8.Каким должно быть ожидаемое поведение, когда это происходит?Должен ли выполняться только что вставленный код js?Если да, то чем он отличается от того, если код находится на самой странице?

Ответы [ 2 ]

2 голосов
/ 27 октября 2010

Чтобы выполнить код JS, который вы вставляете в DIV через innerHTML, вам нужно сделать что-то вроде следующего (любезно предоставлено Юрием Фуксенко в http://www.coderanch.com/t/117983/HTML-JavaScript/Execute-JavaScript-function-present-HTML)

function setAndExecute(divId, innerHTML) {  
    var div = document.getElementById(divId);  
    div.innerHTML = innerHTML;  
    var x = div.getElementsByTagName("script");   
    for (var i=0;i<x.length;i++) {  
        eval(x[i].text);  
    }  
}

A немногоболее продвинутый подход здесь: http://zeta -puppis.com / 2006/03/07 / javascript-script-execute-in-innerhtml-the-месть / - найдите <script> теги, возьмите ихсодержание и создать новый элемент в <head>.

1 голос
/ 27 октября 2010

innerHTML не работает для вставки тегов скрипта (потому что связанный скрипт, в большинстве браузеров, не будет выполнен). На самом деле, вы должны вставить тег script один раз на стороне сервера и вставить только ссылку в месте каждого сообщения (то есть, если вы добавляете это на домашнюю страницу блога, которая показывает несколько сообщений, каждое со своими собственными URL).

Если по какой-то причине вы решили, что должны использовать один фрагмент JavaScript, чтобы сделать все это, по крайней мере импортируйте скрипт кнопки твита таким образом, чтобы он работал, например, способ Google Analytics или MediaWiki (ищите функцию importScriptURI). (Обратите внимание, что я не знаю специфики кнопки твита, поэтому она может даже не работать.)

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