Как найти <script>по идентификатору - PullRequest
0 голосов
/ 03 сентября 2010

У меня есть <script>, где он добавляет к <head> другой скрипт. Этот новый скрипт должен найти оригинал <script>, который его вставил. можно поставить <script id="blablabla"> и позволить новому <script> его найти?

<div id="placeholder-1"></div>
<script type="text/javascript">
            <//![CDATA[
            (function() {
             var s = document.createElement("script");
             s.type = "text/javascript";
             s.async = true;
             s.src = "blablabla.com/blabla.js";
             (document.getElementsByTagName("head")[0] ||
              document.getElementsByTagName("body")[0]).appendChild(s);
             })();//]]></script>

Теперь, blabla.js должен найти заполнитель div. Я пытаюсь сохранить заполнитель div, указав его идентификатор в сценарии.

это браузер совместимый?

спасибо

Ответы [ 3 ]

6 голосов
/ 03 сентября 2010

В HTML 5 просто поместите атрибут id в тег script.

     <script id="myscript">
         // Your script here
     </script>

В HTML 4 тег id на самом деле не определен как допустимый для тега сценария.

http://www.w3.org/TR/html4/interact/scripts.html#edef-SCRIPT Официальная спецификация W3C

Официально разрешены только src, type, lodge, defer и charset.

Допустимым обходным решением может быть это ...

<div id="scriptcontainer">
     <script type="text/javascript">
         // Your script here
     </script>
</div>

Теперь вы можете перейти к сценарию, используя идентификатор элемента div в вашем "blabla.js"

var myScript = document.getElementById("scriptcontainer").getElementsByTagName("script")[0];

По сути, вложив сценарий вэлемент с идентификатором, мы можем попасть в сценарий из другого сценария, а также иметь допустимую разметку.

Дополнительное примечание: в спецификации HTML 4 идентификатор был действительно запрещен для тега сценария:

id Все элементы, кроме BASE, HEAD, HTML, META, SCRIPT, STYLE, TITLE ID # ПРЕДПОЛАГАЕТСЯ уникальный для всего документа уникальный идентификатор

2 голосов
/ 03 сентября 2010

Да, вы можете сделать это.id является одним из глобальных атрибутов, которые могут быть указаны для всех элементов HTML (даже тех, которые не определены в спецификации html).Тег script сам по себе допускает

Content attributes:
Global attributes
src
async
defer
type
charset

EDIT

Обратите внимание, что эта информация взята из спецификации HTML5.Я не уверен в предыдущих версиях, которые все еще могут использоваться в учебных пособиях.

Таким образом, он должен быть уже совместим с браузерами всех основных браузеров (то есть тех, которые утверждают, что поддерживают HTML5).

1 голос
/ 20 сентября 2014

showtime = setInterval("Time()", 1000) в конце сценария js, например, последняя строка.

Таким образом, вы можете поместить сценарий в область тега head и вызвать сценарий по его идентификатору, в данном случае id=time.
Я использую его в своем таймере на веб-странице, и, добавив несколько нулей к 1000, скажем, добавив 15 нулей и, конечно, изменив время идентификатора на любое, вы можете, очевидно, обмануть браузер достаточно долго, чтобыпокончим с этим, ...

Каковы шансы, что некоторые останутся на веб-странице в течение 10000000000000000000000 миллисекунд, когда тик появляется, хотя вы получите ошибку, поэтому не устанавливайте ее короткой.

Кстати, вопрос выше состоял в том, почему я пришел на эту страницу, так как я искал лучший способ обмануть браузер, но, прочитав все ответы, я думаю, что я продолжу обманывать его!

Для примера я использовал нечто похожее на это в теле: "<center<FONT SIZE="2" COLOR="#003300"><b><div id=time></div></b></FONTcenter>"

Неделя имеет 604800000 миллисекунд, я думаю, вы сначала закрываете свою страницу.

http://www.temnolooi.nl/2014a/agenda/agenda.html

Примечание: принять к сведениюВ связи с тем, что размещение сценариев в тегах head загрузит файл, поэтому не злоупотребляйте им, иначе вы можете получить переполнение стека.Скрипты в теле выполняются только тогда, когда HTML использует его или пользователь вызывает его.

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