如何在没有jQuery的情况下将脚本注入文档<head>
how to inject script into document <head> without jquery
我正在构建一个浏览器扩展,我在<script>
标签中有一个函数,可以修改我需要注入到任何给定网页<head>
中的 DOM。整个函数是一个字符串("<script>function content blah blah</script>"
)。我正在使用jquery来实现这一点:
$('head').prepend(modFunction);
这工作正常。出于几个原因,我想删除 jQuery,但是当我尝试创建一个 <script>
元素以使用香草 javascript 注入到<head>
时,一切都失败了。到目前为止,我已经尝试了两种方法:
1.
var headSelector = document.querySelector('head');
var el = document.createElement('div');
el.innerHTML = modFunction;
modFunction = el.firstChild;
headSelector.insertBefore(modFunction, headSelector.firstChild);
2. document.head.insertAdjacentHTML('afterbegin', modFunction);
两次javascript尝试都将带有正确函数的<script>
标签注入<head>
,但是都没有执行该函数。不知道为什么jQuery可以工作,而vanilla javascript不能。任何帮助将不胜感激。谢谢
你有几个错误。
-
如果
modFunction
是前后包含<script>
标记的字符串,则代码将不起作用,因为更改div
的innerHTML
不会执行添加的脚本。 -
使用
insertAdjacentHTML
函数是不必要的,因为modFunction
现在是类型为Text
的对象,它将在脚本之前插入[object Text]
字符串。 -
相反,请使用
appendChild
函数将新的脚本元素正确插入到head中。
尽管@Jantho1990说最好从文件加载脚本,但许多浏览器使用缓存,因此如果您更改脚本源,它不会始终在浏览器中可见。
var scriptSource = '//YourScriptSource.....';
var scriptElem = document.createElement('script');
scriptElem.text = scriptSource;
document.head.appendChild(scriptElem);
SoftwareEngineer171的答案有效(见 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script 中的文字),但我想指出几件事:
-
您不应该将
<div>
元素注入<head>
。这是无效的 HTML,通常是一种不好的做法。 -
通常,最好将 JavaScript 作为文件存储在服务器上,并使用 src 属性将该文件放到页面上。这不仅更安全,而且当您需要返回并更新代码时,还可以为您节省大量工作。
我会推荐以下解决方案:
你的JavaScript文件.js
function content blah blah
内嵌:
<script type="text/javascript" src="yourJavaScriptFile.js"></script>
- 使用promise和mongoose对文档进行排序
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- Ajax请求文档就绪会导致jquery加载缓慢
- MongoDB (php) - 以数组而不是多个属性的形式返回文档属性
- 谷歌文档表面引擎
- 来自文档或下一个静态父级的事件委派
- 如何将childNodes用于XML文档
- 文档就绪提供了错误的选择器高度
- 将当前用户的 ID 推送到 meteorjs 中集合/文档的内部数组
- Angular2文档-层次依赖注入程序(恢复服务)
- jQuery文档是否准备好等待通过Backbone动态注入的html元素
- 有没有办法将 css 文件或 javascript 文件动态注入 HTML 文档的 head 标签中
- 在没有服务器端资源的情况下将 HTML 注入到 HTML 文档中.(离线)
- 向文档注入动态CSS
- 事件处理程序无法监视文档加载后注入HTML的元素
- Javascript HTML字符串-注入到文档中
- 通过Ajax将XML文档中的HTML节点注入HTML文档
- 如何在没有jQuery的情况下将脚本注入文档
- 通过文档注入脚本后执行函数.写入已完成加载
- 文档.getElementById将答案从提示符注入到错误的位置