我们都知道<script src="/something.js"></script>
的作用。该文件将加载到页面中并运行脚本。
有没有办法覆盖解释<script>
元素的默认行为?
我想要相同的语法(<script src='...'></script>
)只能从something.js
获取代码(可能通过XHR / jQuery ajax)并将其传递给foo (...) {...}
函数。然后我会关心我将用它做什么。
澄清问题:
我可以使用以下方法轻松创建伪<script>
标记替换
<div data-script-src="/1.js"></div>
<div data-script-src="/2.js"></div>
<div data-script-src="/3.js"></div>
<div data-script-src="/4.js"></div>
然后在js方面我会这样做:
var $scripts = $("[data-script-src]")
, scriptContents = [];
(function loadInOrder (i) {
if (!$scripts[i]) { alert("Loaded"); }
$.ajax($($scripts[i]).attr("data-script-src"), function (data) {
scriptContents[i] = data;
loadInOrder(++i);
});
})(0);
但如何将div[data-script]
替换为<script>
?例如,如何强制浏览器不加载具有属性<script>
的{{1}}代码?
答案 0 :(得分:2)
我不确定,如果这会回答您的问题,但没有更多数据,我可以建议:
创建自己的PHP文件,它将作为一种门。然后
<?php
$file = file_get_contents(your_url);
$file = str_replace('<script', '<myscript', $file);
$file = str_replace('</script>', '</myscript>', $file);
echo $file;
?>
然后根据需要添加您的真实脚本类型,该脚本将搜索 myscript 标记并运行Javascript代码...
您也可以使用div元素(如果脚本在主体中加载,您需要验证):
substitute: '<script' -> '<div data-id="my-script" '
substitute: '<script' -> '</div>'
如果您需要更多帮助,请写信。请不要贬低,因为问题对我来说有点模糊:)。
PS。我不知道这些是您的网站还是来自互联网的网站,您希望覆盖默认行为。所以要小心你的“file_getting_contents”因为,这将直接回应你的浏览器... :)。
答案 1 :(得分:2)
我认为你最好的选择是使用onbeforescriptexecute。此事件在脚本执行之前触发,因此您可以将type
属性修改为text/javascript
以外的其他属性(从而告诉浏览器不要执行内容)。这仍将加载来自服务器的数据。
不幸的是,onbeforescriptexecute
仅在FF / Opera中受支持。
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script>
document.addEventListener("beforescriptexecute", function (e) {
console.log(e.target.innerHTML || e.target.src);
}, true);
</script>
<script>
console.log("12");
</script>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
</head>
<body>
Hi
</body>
</html>
控制台输出将是:
'console.log("12")'
'http://code.jquery.com/jquery-1.10.2.min.js'