相关疑难解决方法(0)

我如何引用加载当前正在执行的脚本的脚本标记?

如何引用加载当前运行的javascript的脚本元素?

这是情况.我在页面中加载了一个"主"脚本,首先是在HEAD标记下.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript" src="scripts.js"></script>
Run Code Online (Sandbox Code Playgroud)

"scripts.js"中有一个脚本,它需要能够按需加载其他脚本.普通方法对我来说并不适用,因为我需要添加新脚本而不引用HEAD标记,因为HEAD元素还没有完成渲染:

document.getElementsByTagName('head')[0].appendChild(v);
Run Code Online (Sandbox Code Playgroud)

我想要做的是引用加载当前脚本的脚本元素,以便然后我可以将新的动态加载的脚本标记添加到DOM之后.

<script type="text/javascript" src="scripts.js"></script>
loaded by scripts.js--><script type="text/javascript" src="new_script1.js"></script>
loaded by scripts.js --><script type="text/javascript" src="new_script2.js"></script>
Run Code Online (Sandbox Code Playgroud)

javascript element parent

275
推荐指数
8
解决办法
13万
查看次数

`document.write`是否适合查找与当前运行的脚本相关的元素?

如何找到与当前运行的脚本关联的脚本元素?我只对文档正文中的脚本感兴趣,而不是在头部(或其他地方).

这是我到目前为止,它似乎工作正常.我有没有想到的任何陷阱?

function getCurrentScriptElement() {
    var placeholderId = 'placeholder-' + Math.random(), 
        script, placeholder;
    document.write('<br id="' + placeholderId + '">');
    placeholder = document.getElementById(placeholderId);
    script = placeholder.previousSibling;
    placeholder.parentNode.removeChild(placeholder);
    return script;
}
Run Code Online (Sandbox Code Playgroud)

我想到的用例涉及需要在脚本标记出现的文档中的相同位置注入内容的脚本,因此延迟加载不会成为问题.换句话说,我只会在适当的地方调用此函数,它不会作为API或任何东西的一部分公开.

我也知道XHTML 的问题,document.write在这种情况下我并不担心(到目前为止).


我以前的尝试看起来像这样:

function getCurrentScriptElement() {
    var scripts = document.getElementsByTagName('script');
    return scripts[scripts.length - 1];
}
Run Code Online (Sandbox Code Playgroud)

但是,正如我们在这个问题中看到的,如果将另一个脚本注入到文档中,这很容易失败.


我也在WHATWG规范中找到document.currentScript了.目前似乎没有得到广泛支持.有一个有趣的垫片需要另一条路线 ...脚本触发错误,捕获它,检查堆栈跟踪以找到脚本的URL,然后找到具有匹配属性的脚本元素.document.currentScriptsrc

这是一个聪明的解决方案,但它显然无法在IE中运行,如果多个脚本使用相同的URL,它将会中断.


理想情况下,我想找到一个解决方案,它提供与顶级代码示例相同的结果(没有额外要求),但不依赖于document.write.这可能吗?如果没有,假设它正确使用(仅在页面加载期间,而不是XHTML),此代码是否相当安全?


编辑:请参阅此答案以了解另一个可能的用例,以及有关br元素用于占位符的原因的详细信息.

html javascript dom

11
推荐指数
1
解决办法
797
查看次数

获取当前脚本标记

可能重复:
我如何引用加载当前正在执行的脚本的脚本标记?

我不想在这个表单的脚本中实现此配置选项

<script src="x.js" attr1="val1" attr2="val2" attr3="val3"></script>
Run Code Online (Sandbox Code Playgroud)

问题是找到当前脚本标记,x.js可以在varius路径fold1/x.js fold1/fold2/x.js ../fold/x.js 等...我认为这是可能的,因为Dojo框架使用这种方法.

javascript

3
推荐指数
1
解决办法
1940
查看次数

是否有可能javascript引用创建它的脚本元素?

可能重复:
我如何引用加载当前正在执行的脚本的脚本标记?
你能选择包含JavaScript的脚本元素吗?

有没有identifyScript可以使这项工作?jQuery也很酷:

<script type="text/javascript" id="script1">
    function identifyScript(){...}
</script>
<script type="text/javascript" id="script1">
    identifyScript(); //This function would alert "script1"
</script>
<script type="text/javascript" id="script2">
    identifyScript(); //This function would alert "script2"
</script>
Run Code Online (Sandbox Code Playgroud)

html javascript jquery

0
推荐指数
1
解决办法
85
查看次数

标签 统计

javascript ×4

html ×2

dom ×1

element ×1

jquery ×1

parent ×1