jsdom:使用jQuery将脚本附加到body

时间:2012-11-09 02:22:48

标签: jquery node.js dom jsdom

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

1 个答案:

答案 0 :(得分:0)

我刚刚遇到了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');