2

如何使用 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>...

有趣的是,如果您在其中添加了一个空格,<sc ript src="..."></script>则会正确附加,所以某些东西(我希望是 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
4

1 回答 1

1

我刚刚在 jsdom 中遇到了这个问题,我只想<script><head>.

以下代码:

$('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>

这似乎只在附加已设置属性<script>的元素时发生。当你第一次追加空然后设置它src时,一切似乎都很好<script>src

$('<script>').appendTo($('head')).attr('src','script.js');
于 2013-06-11T20:29:05.583 回答