如何使用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
答案 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');