我有一个处理制表符开关的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>
那么,有没有办法在<script src="..."></script>
标签内运行JavaScript?我缺少什么?
答案 0 :(得分:8)
不,这是不可能的。 html规范要求<script>
标记执行其中一个。
W3 Schools,强调我的。
该元素包含脚本语句,或它通过src属性指向外部脚本文件。
注意:如果存在“src”属性,则该元素必须为空。
<script>
Tag Html Spec,强调我的。
脚本可以在SCRIPT元素的内容中定义,也可以在外部文件中定义。如果未设置src属性,则用户代理必须将该元素的内容解释为脚本。 如果src具有URI值,则用户代理必须忽略该元素的内容并通过URI检索脚本。
答案 1 :(得分:0)
您可以使用src
,也可以将JavaScript放在代码中。
但不是两个一次。无论如何使用两个标签没有任何缺点(除了更大的文件大小)。
答案 2 :(得分:0)
你应该以第二种方式去做。在<script src="Resources/Tabs.js">InitializeTabs(0, 4);</script>
中你引用了一个外部javascript文件,你的内联代码应该进入第二个脚本块。
答案 3 :(得分:0)
当您包含<script src="Resources/Tabs.js"></script>
时,您提到要使用Tabs.js
文件中包含的Javascript,以便编译器知道在哪里查找InitializeTabs
函数,它试图执行该功能。
现在,如果您想要包含一些内联的Javascript,那就在HTML中,那么您使用的是<script>... JAVASCRIPT HERE .... </script>
你需要这样做
<script src="Resources/Tabs.js"></script>
<script>InitializeTabs(0, 4);</script>
答案 4 :(得分:0)
您不能将javascript放在<script src="...
标记内,但您可以运行一个解析HTML的JavaScript文件,查找<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);
});