jsdom:使用 jQuery 将脚本附加到正文

Posted

技术标签:

【中文标题】jsdom:使用 jQuery 将脚本附加到正文【英文标题】:jsdom: Appending scripts to body with jQuery 【发布时间】:2012-10-29 08:52:17 【问题描述】:

如何使用 jsdom 和 jQuery 将脚本附加到 DOM 主体?使用$('body').append('<script src="..."></script>') 的明显答案实际上最终会在文档head 中添加脚本。

这是我正在测试的基本 node.js 脚本:

var jsdom = require('jsdom');

jsdom.env(
    "http://google.com",
    ['http://code.jquery.com/jquery-1.6.min.js'],
    function(err, window) 
        var $ = window.jQuery;
        $('body').append('<script src="http://example.com/script.js"></script>');
        console.log($('html').html());
    
);

这导致某些内容以:

开头
<head><script src="http://example.com/script.js?_=1352426933034"></script>...

有趣的是,如果您在&lt;sc ript src="..."&gt;&lt;/script&gt; 中添加一个空格,那么它会正确附加,所以某些东西(我希望是 jsdom)正在劫持这个脚本,因此它可以添加 cachebuster(?) 并将其放在标题中。是什么导致了这种情况以及我如何防止它发生所以它会改为附加脚本?

为了它的价值,

$ npm ls
/Users/codyaray/dev/proxy/test
└─┬ jsdom@0.2.19
  ├─┬ contextify@0.1.3
  │ └── bindings@1.0.0
  ├── cssom@0.2.5
  ├── cssstyle@0.2.3
  ├── htmlparser@1.7.6
  └─┬ request@2.11.4
    ├─┬ form-data@0.0.3
    │ ├── async@0.1.9
    │ └─┬ combined-stream@0.0.3
    │   └── delayed-stream@0.0.5
    └── mime@1.2.7

【问题讨论】:

不是答案,但您可以尝试使用cheerio 【参考方案1】:

我只是在jsdom中遇到了这个问题,只是我想将&lt;script&gt;附加到&lt;head&gt;

以下代码:

$('head').append('<script type="text/javascript" src="script.js"></script>');

导致:

<head>
  <script type="text/javascript" src="script.js"></script>
  <script src="script.js?_=1352426933034"></script>
</head>

这似乎只在附加 &lt;script&gt; 元素且已设置 src 属性时才会发生。当您首先附加空的 &lt;script&gt;然后 像这样设置其 src 时,一切似乎都很好:

$('<script>').appendTo($('head')).attr('src','script.js');

【讨论】:

以上是关于jsdom:使用 jQuery 将脚本附加到正文的主要内容,如果未能解决你的问题,请参考以下文章

将 html 附加到 jQuery 元素而不在 html 中运行脚本

我如何将awk脚本附加到文件?

试图用jQUERY加载.json

仅当我不通过 jQuery 附加它时才执行的脚本?

Nodejs 学习笔记 - 借助 JSDOM 使用 jQuery

React试图在JSDom下附加Events。