如何在没有jquery的情况下将脚本注入文档

时间:2016-07-14 00:34:02

标签: javascript jquery html dom google-chrome-extension

我正在构建一个浏览器扩展,我在year YEAR标记内部有一个函数,用于修改我需要注入任何给定网页的username的DOM。整个函数是一个字符串(<script>)。我正在使用jquery来实现这个目标:

<head>

这很好用。我想删除jQuery有几个原因但是当我尝试使用vanilla javascript创建一个"<script>function content blah blah</script>"元素注入$('head').prepend(modFunction); 时,一切都失败了。到目前为止,我尝试了两种方法:

1

<script>

2。<head>

两次javascript尝试都会将 var headSelector = document.querySelector('head'); var el = document.createElement('div'); el.innerHTML = modFunction; modFunction = el.firstChild; headSelector.insertBefore(modFunction, headSelector.firstChild); 标记带有正确的函数注入document.head.insertAdjacentHTML('afterbegin', modFunction);,但是,都不会执行该函数。不知道为什么jQuery正在工作,而vanilla javascript却没有。任何帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:4)

你有一些错误。

  1. 如果您的import pymongo client = pymongo.MongoClient() db = client['tese'] carteiras_cvm = db['carteiras_cvm'] pipeline_acoes =[{"$unwind":"$posicao"}, {"$match" : {"posicao.detalhes.Tipo de Aplicação:" : { "$in" : ['Ações','Brazilian Depository Receipt - BDR', 'Ações e outros TVM cedidos em empréstimo','AÇÕES RECEBIDAS EM BONIFICAÇÃO']}}}, {"$project":{"cnpj_fundo":"$cnpj_fundo", "data_carteira":"$data_carteira", "tipo_aplicacao":"$posicao.detalhes.Tipo de Aplicação:","cod_ativo":"$posicao.detalhes.Cod Ativo:","cod_isin":"$posicao.detalhes.Cod ISIN:","cod_isin":"$posicao.detalhes.Cod ISIN:","descricao":"$posicao.detalhes.Descrição:","posicao_final":"$posicao.posicao_final","perc_carteira":"$posicao.perc_carteira","pl_fundo":"$pl_posicao"}}] def aggregate(db, pipeline): return [doc for doc in carteiras_cvm.aggregate(pipeline).batch_size(5)] resultados_acoes = aggregate(carteiras_cvm, pipeline_acoes) 是一个在其前后包含modFunction标记的字符串,则您的代码无法正常工作,因为更改了<script> innerHTML }将不会执行添加的脚本。

  2. 使用div函数是不必要的,因为insertAdjacentHTML现在是modFunction类型的对象,它将在您的脚本之前插入Text字符串。

  3. 而是使用[object Text]函数将正确的新脚本元素插入到头部。

  4. 尽管@ Jantho1990表示最好从文件加载脚本,但许多浏览器都使用缓存,因此如果您更改脚本源,它将不会在浏览器中始终可见。

    appendChild

答案 1 :(得分:-2)

SoftwareEngineer171的答案有效(参见https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script中的文字),但我想指出几点:

  1. 您不应该将<div>元素注入<head>。它是无效的HTML,也是一般的不良做法。

  2. 通常,最好将JavaScript作为文件存储在服务器上,并使用src属性将该文件存入页面。这不仅更安全,而且当您需要返回并更新代码时,它还可以为您节省大量工作。

  3. 我会推荐以下解决方案:

    yourJavaScriptFile.js

        function content blah blah
    

    内联:

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