我正在使用 PhantomJS 对 HTML 进行一些重写。我正在向background-image
元素添加属性。但是当我写出生成的 DOM 时,该 URL 已被重写为本地 URL。我将其归结为以下测试用例:
JS
var page = require('webpage').create();
page.open("test.html",function(){
setTimeout(function(){
page.evaluate(function(){
document.getElementById("test").style.backgroundImage="url(test.png)";
});
console.log(page.content);
phantom.exit();
},1000);
});
HTML
<html>
<body>
<div id="test"></div>
</body>
</html>
输出
$ phantomjs test.js
<html><head></head><body>
<div id="test" style="background-image: url(file:///C:/cygwin/tmp/test.png); ">
</div>
</body></html>
更新
如果您指定
./test.png
或,问题仍然存在//test.png
。但是,http://example.com/test.png
正如预期的那样,保持不变。如果此 HTML 文档在 Chrome 中打开,并且
background-image
属性添加到div
样式检查器中的元素,则 URL 未修改,无论是在 devtools 的“元素”选项卡中检查该文档,还是通过document.body.innerHTML
在控制台中显示,或复制 HTML。
更新 2
我刚刚发现如果文档位于 Chrome 中,并且elt.style.backgroundImage="url(test.png");
在控制台中发出命令,那么 URL 会被重写。所以在一天结束时,这似乎不是 PhantomJS 问题,尽管我仍然不理解这种行为。
显然,我不希望这个 URL 以这种方式被重写,我不明白为什么 PhantomJS 觉得有必要这样做。想法?