确保脚本标记作为正文中的第一个标记包含在内?

时间:2015-07-17 18:37:59

标签: javascript

我有一个脚本文件,我希望第三方实现者包含在他们的网页中。

我希望这个脚本成为正文中包含的第一个标记,所以

<body>
<script type="text/javascript" src="/my_script.js"></script>
...

在不使用任何第三方库的情况下,最好的方法是什么?

我的意图是在呈现任何页面之前运行此脚本。如果标签没有正确包含,我想向开发人员显示一条错误消息,告诉他们将标签作为正文中的第一个标签。

编辑:此脚本将用于防止点击劫持,并且如果嵌入器不在白名单中,则基本上会隐藏整个文档。为什么它需要成为页面中的第一个脚本?确保在运行脚本之前没有任何可点击的内容可见,并确保其他脚本错误也不会干扰此脚本运行。所以它绝对不需要是第一个,但它应该非常接近第一;-)这种方法是based off of this suggestions at the Owasp site,但是试图成为更多的&#34;只需将其放入& #34;溶液

3 个答案:

答案 0 :(得分:2)

正文中的第一个元素

/my_script.js。您可以添加以下代码:

if (document.body.firstElementChild == document.currentScript) {
    // Is first element
} else {
    // Is not first element
}

我不确定为什么你需要这样做但是这是怎么做的。

将脚本移动到第一个元素

如果要移动脚本:

document.body.insertBefore(document.currentScript, document.body.firstChid);
document.currentScript.parentElement.removeChild(document.currentScript);

检查脚本是否是第一个脚本

if (( document.scripts || document.getElementById('script') )[0] == document.currentScript)

答案 1 :(得分:1)

虽然我在想象什么要求会让你需要成为身体后的第一个标签时遇到一些麻烦,但我会暂时搁置一下来回答你的技术问题。查询document.body.childNodes将为您提供如此加载的节点。您可以使用该信息来确定您是否在第一行。

答案 2 :(得分:-1)

  

$(document).on(“pagecreate”,function(){// do your loading stuff}

这将在页面呈现之前触发事件。

参考:http://www.w3schools.com/jquerymobile/event_pagecreate.asp