如何延迟脚本标签直到其他脚本标签有 运行
How to delay script tag until other script tag has run
我一直在尝试在网页中进行元编程,并且需要将脚本标记从 运行ning 延迟到 just 另一个脚本标记 [=24] =].但是,需要先加载脚本标签,否则两者都会失败。
我正在尝试做的事情的简化版和更易读的版本:
<script defer>
w=function(){
<stuff that gives a parser error until modified by the next script tag>
}
</script>
<script>
<stuff that changes the previous script tag and any other script tags that ever will be added via the DOM
so it doesn't give a parser error>
</script>
<button onclick='w()'></button>
除了按钮的 onclick
属性失败之外,这将非常有效,因为按钮是在第一个脚本标记 运行 之前加载的。
提前致谢!
正如@meagar 在评论中所建议的那样,如果您不介意更改 "not actually javascript" 脚本块的 type
属性,您可以这样做:
<script type='derpscript'>
var derp;
var w=function(){alert('hello')};
derp||=5;
console.log(derp);
</script>
<script>
function compileDerps() {
// find all derpscript script tags
var x = document.querySelectorAll('script[type=derpscript]');
for(var i=0;i<x.length;i++){
meta=x[i].text
while(true){
pastmeta=meta;
console.log(exc=regex.exec(meta))
if(exc){
meta=meta.replace(regex,exc[1]+'='+exc[1]+'||');
}
if(pastmeta==meta){break;}
}
// make a new javascript script tag to hold the compiled derp
var s = document.createElement('script');
s.text = meta;
document.body.appendChild(s);
// delete the derpscript tag
x[i].parentNode.removeChild(x[i]);
}
}
//stuff that changes the previous script tag and any other script tags that ever will be added via the DOM
var regex=/([a-zA-Z$_][a-zA-Z$_1-9]*)(\|\|\=)/;
var meta;
var pastmeta='';
var exc='';
compileDerps();
</script>
<button onclick='w()'>THIS IS W</button>
我一直在尝试在网页中进行元编程,并且需要将脚本标记从 运行ning 延迟到 just 另一个脚本标记 [=24] =].但是,需要先加载脚本标签,否则两者都会失败。
我正在尝试做的事情的简化版和更易读的版本:
<script defer>
w=function(){
<stuff that gives a parser error until modified by the next script tag>
}
</script>
<script>
<stuff that changes the previous script tag and any other script tags that ever will be added via the DOM
so it doesn't give a parser error>
</script>
<button onclick='w()'></button>
除了按钮的 onclick
属性失败之外,这将非常有效,因为按钮是在第一个脚本标记 运行 之前加载的。
提前致谢!
正如@meagar 在评论中所建议的那样,如果您不介意更改 "not actually javascript" 脚本块的 type
属性,您可以这样做:
<script type='derpscript'>
var derp;
var w=function(){alert('hello')};
derp||=5;
console.log(derp);
</script>
<script>
function compileDerps() {
// find all derpscript script tags
var x = document.querySelectorAll('script[type=derpscript]');
for(var i=0;i<x.length;i++){
meta=x[i].text
while(true){
pastmeta=meta;
console.log(exc=regex.exec(meta))
if(exc){
meta=meta.replace(regex,exc[1]+'='+exc[1]+'||');
}
if(pastmeta==meta){break;}
}
// make a new javascript script tag to hold the compiled derp
var s = document.createElement('script');
s.text = meta;
document.body.appendChild(s);
// delete the derpscript tag
x[i].parentNode.removeChild(x[i]);
}
}
//stuff that changes the previous script tag and any other script tags that ever will be added via the DOM
var regex=/([a-zA-Z$_][a-zA-Z$_1-9]*)(\|\|\=)/;
var meta;
var pastmeta='';
var exc='';
compileDerps();
</script>
<button onclick='w()'>THIS IS W</button>