Внедрение HTML в DOM с использованием тега script - PullRequest
0 голосов
/ 02 декабря 2011

Мы разрешаем пользователям размещать

<script language="javascript" src="oursite/script.php"></script>

тег на их странице, который затем должен вставить некоторый контент с нашего сайта на свой сайт. В настоящее время script.php содержит document.write («некоторый контент загружен из базы данных»), однако существуют некоторые ограничения.

Могу ли я в любом случае добиться того же, используя jQuery? Как я могу сказать jQuery поместить определенный кусок кода HTML именно там, где находится скрипт? document.write () может сделать это, но я не уверен, как это сделать с помощью jquery. (Мы уже предоставляем jquery-код js клиенту через script.php.

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Вам не нужен jQuery, чтобы сделать document.write().Пока он выполняется встроенным (то есть не в обработчике событий, таком как $(document).ready()), он будет работать.Просто убедитесь, что вы избегаете тега конечного сценария (например: <\/script>), чтобы анализатор HTML не принял его за фактический тег конечного сценария:

<script type="text/javascript">
    document.write("<script language=\"javascript\" " +
        "src=\"oursite/script.php\"><\/script>");
</script>

В качестве альтернативы, вы можете добавитьскрипт с использованием DOM-манипуляций.Если вы хотите добавить скрипт после загрузки страницы, это ваш единственный вариант.Чтобы расположить его после тега сценария, который его вызывает, присвойте тегу сценария идентификатор и используйте $("#myScript").after("<script>"):

<script type="text/javascript" id="myScript">
    $(function () {
        $("#myScript").after("<script>").attr({
            language: "javascript",
            src: "oursite/script.php"
        });
    });
</script>
0 голосов
/ 02 декабря 2011

Вам не обязательно использовать jQuery, но вы можете.

Основная проблема здесь - поиск узла скрипта при загрузке страницы.

Вы можете присвоить ему id и надеяться, что на странице другого пользователя нет повторяющихся идентификаторов.

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

(function(){ // this is just so you don't run into name collisions with the user's page
// Get all script elements
var scripts = document.getElementsByTagName('script');
// we know the last script element will be *this* one
var script = scripts[scripts.length-1];
var newp = document.createElement('p');
newp.textContent = 'inserted paragraph';
// now insert our new nodes after the current script
script.parentNode.insertBefore(newp, script.nextSibling);
})();

Конечно, вы также можете использовать jQuery с var $script = $('script:last');, но если вам это не нужно, вы можете сэкономить время загрузки, не используя его.

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