找到当前脚本的推荐方法?

Chr*_*phe 9 javascript dom document.write getelementsbytagname

我正在编写一个脚本,需要将DOM元素添加到页面,脚本所在的位置(类似于小部件的方法).做这个的最好方式是什么?

以下是我正在考虑的技术:

  1. 在脚本正上方包含一个id ="Locator"的元素.问题:
    • 我不喜欢额外的标记
    • 如果我在页面中重用小部件,则几个元素将具有相同的"定位符"ID.我在考虑在脚本中添加一行来删除曾经使用过的id,但仍然......
  2. 在脚本中添加id.问题:
    • 即使它似乎工作,id属性对脚本元素无效
    • 与上面相同的问题,如果我在页面中重用脚本,则几个元素将具有相同的id.
  3. 使用getElementsByTagName("script")并选择最后一个元素.到目前为止,这对我有用,它看起来有点沉重,我不确定它是否可靠(考虑延迟脚本)
  4. document.write:不优雅,但似乎做了这个工作.

  5. [编辑]根据idealmachine的回复,我正在考虑另外一个选择:

    • 在脚本标记中包含一个属性,例如goal ="tabify".
    • 使用getElementsByTagName("script")获取所有脚本.
    • 循环遍历脚本并检查goal ="tabify"属性以查找我的脚本.
    • 如果页面中有另一个小部件,请删除目标属性.
  6. [编辑]另一个想法,也受到迄今为止的回复的启发:

    • 使用getElementsByTagName("script")获取所有脚本.
    • 循环遍历脚本并检查innerHTML以查找我的脚本.
    • 在脚本结束时,如果页面中有另一个窗口小部件,请删除脚本标记.

Luc*_*eis 5

我曾在OnlyWire工作过,该公司提供的主要服务是在您的网站上放置一个小部件。

我们使用了这个var scripts = document.getElementsByTagName("script"); var thisScript = scripts[scripts.length - 1];技巧,看起来效果很好。然后我们thisScript.parentNode.insertBefore(ga, thisScript);在 DOM 树中的前面插入我们想要的任何内容。

我不确定我是否理解为什么您认为这是一个“重型”解决方案......它不涉及迭代,它是一个完美集成的纯粹的跨浏览器解决方案。


Str*_*Kid 5

开箱即用:document.currentScript (IE不支持)

  • 谢谢!不幸的是,并非所有主要浏览器都支持。 (2认同)

Chr*_*phe 0

我刚刚找到了另一种似乎可以回答我的问题的方法:

如何从 javascript 访问父 Iframe

将脚本嵌入 iframe 中可以随时找到它,因为脚本始终保留对其自身窗口的引用。

我认为这是最好的方法,因为无论您将脚本添加到页面多少次(想想小部件),它总是有效。欢迎您发表评论。

首先促使我考虑 iframe 的是我为构建 Google 小工具所做的一个实验。