3

我正在使用 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>

更新

  1. 如果您指定./test.png或,问题仍然存在//test.png。但是,http://example.com/test.png正如预期的那样,保持不变。

  2. 如果此 HTML 文档在 Chrome 中打开,并且background-image属性添加到div样式检查器中的元素,则 URL 未修改,无论是在 devtools 的“元素”选项卡中检查该文档,还是通过document.body.innerHTML在控制台中显示,或复制 HTML。

更新 2

我刚刚发现如果文档位于 Chrome 中,并且elt.style.backgroundImage="url(test.png");在控制台中发出命令,那么 URL 会被重写。所以在一天结束时,这似乎不是 PhantomJS 问题,尽管我仍然不理解这种行为。

显然,我不希望这个 URL 以这种方式被重写,我不明白为什么 PhantomJS 觉得有必要这样做。想法?

4

0 回答 0