Запустить JavaScript внутри тегов <script src = "..."> </ script>?

javascript html

8472 просмотра

5 ответа

У меня есть файл JavaScript, который обрабатывает вкладки переключателей. Вот источник:

var tCount = 0;

function SwitchToTab(id) {
    if (id < 0 || id > tCount) { id = 0; }

    for (var i = 0; i < tCount; i++) { document.getElementById("tab" + i).className = ""; }
    document.getElementById("tab" + id).className = "active";

    for (var i = 0; i < tCount; i++) { document.getElementById("area" + i).style.display = "none"; }
    document.getElementById("area" + id).style.display = "";
}

function InitializeTabs(initialTabId, tabsCount) {
    tCount = tabsCount;
    SwitchToTab(initialTabId);
}

Я пытаюсь сделать это как можно короче, вот так:

<script src="Resources/Tabs.js">InitializeTabs(0, 4);</script>

Это не работает, но работает, если я разделяю их так:

<script src="Resources/Tabs.js"></script>
<script>InitializeTabs(0, 4);</script>

Итак, есть ли способ запустить JavaScript внутри <script src="..."></script>тегов? Чего мне не хватает?

Автор: MFatihMAR Источник Размещён: 12.11.2019 10:01

Ответы (5)


8 плюса

Решение

Нет, это невозможно. Спецификация html диктует, что <script>тег делает один или другой.

W3 школы , акцент мой.

Элемент либо содержит операторы сценариев, либо указывает на внешний файл сценария через атрибут src.

Примечание: если присутствует атрибут "src", элемент должен быть пустым.

<script>Тэг Html Spec , акцент мой.

Сценарий может быть определен в содержимом элемента SCRIPT или во внешнем файле. Если атрибут src не установлен, пользовательские агенты должны интерпретировать содержимое элемента как сценарий. Если src имеет значение URI, пользовательские агенты должны игнорировать содержимое элемента и извлекать сценарий через URI.

Автор: DLeh Размещён: 02.04.2015 01:24

0 плюса

Вы можете использовать srcили поместить JavaScript внутри тега.

Но не оба сразу. В любом случае, нет никаких недостатков в использовании двух тегов (кроме большого размера файла).

Автор: MightyPork Размещён: 02.04.2015 01:23

0 плюса

Вы должны сделать это вторым способом. если <script src="Resources/Tabs.js">InitializeTabs(0, 4);</script>вы ссылаетесь на внешний файл javascript, ваш встроенный код должен перейти во второй блок сценария.

Автор: what is sleep Размещён: 02.04.2015 01:23

0 плюса

Когда вы включаете <script src="Resources/Tabs.js"></script>, вы упоминаете, что хотите использовать Javascript, который включен в Tabs.jsфайл, чтобы компилятор знал, где искать InitializeTabsфункцию, когда он пытается выполнить функцию.

Теперь, если вы хотите включить встроенный Javascript, который находится внутри HTML, тогда вы используете <script>... JAVASCRIPT HERE .... </script>

Вы должны сделать это так

<script src="Resources/Tabs.js"></script>
<script>InitializeTabs(0, 4);</script>
Автор: Saagar Elias Jacky Размещён: 02.04.2015 01:27

0 плюса

Вы не можете поместить javascript в <script src="...теги, но вы можете запустить файл JavaScript, который анализирует HTML, ищет <script srcтеги, которые преобразуют его в два тега.

Например,

<script src="Resources/Tabs.js">InitializeTabs(0, 4);</script>

должен быть преобразован в

<script src="Resources/Tabs.js"></script>
<script>InitializeTabs(0, 4);</script>

Вот код, который я попробовал:

var tags = document.querySelectorAll("script[src]");
[].forEach.call(tags, function(elem){
  var text = elem.innerText;
  var src  = elem.src;
  var parent = elem.parentNode;
  parent.removeChild(elem);
  var newTag = document.createElement('script');
  newTag.setAttribute('src', src);
  parent.appendChild(newTag);
  var newTag = document.createElement('script');
  var t = document.createTextNode(text);
  newTag.appendChild(t);
  parent.appendChild(newTag);
});

в JSFiddle

Автор: theonlygusti Размещён: 02.04.2015 01:49
Вопросы из категории :
32x32