gpt4 book ai didi

javascript - 使用 PhantomJS 嵌入网页的所有图像会产生警告但有效

转载 作者:可可西里 更新时间:2023-11-01 01:36:18 26 4
gpt4 key购买 nike

我试图通过嵌入所有图像(以及通过此点后的其他外部资源)将网页转换为单个文件。这是我运行 PhantomJs 的方式:

./phantomjs --web-security=false ./embed_images.js http://localhost/index.html > output.txt

这是 embed_images.js:

var page = require('webpage').create(),
system = require('system'),
address;

if (system.args.length === 1) {
console.log('Usage: embed_images.js <some URL>');
phantom.exit(1);
}
else {
page.onConsoleMessage = function(msg) {
console.log(msg);
};
address = system.args[1];
page.open(address, function(status) {
page.evaluate(function() {
function embedImg(org) {
var img = new Image();
img.src = org.src;
img.onload = function() {
var canvas = document.createElement("canvas");
canvas.width = this.width;
canvas.height = this.height;

var ctx = canvas.getContext("2d");
ctx.drawImage(this, 0, 0);

var dataURL = canvas.toDataURL("image/png");

org.src = dataURL;
console.log(dataURL);
}
}
var imgs = document.getElementsByTagName("img");
for (var index=0; index < imgs.length; index++) {
embedImg(imgs[index]);
}
});
phantom.exit()
});
}

当我运行上述命令时,会生成如下文件:

Unsafe JavaScript attempt to access frame with URL  from frame with URL file://./embed_images.js. Domains, protocols and ports must match.
Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

上述错误消息有多个实例。为了测试问题所在,我在 Chromium 的控制台中运行了以下代码:

function embedImg(org) {
var img = new Image();
img.src = org.src;
img.onload = function() {
var canvas = document.createElement("canvas");
canvas.width = this.width;
canvas.height = this.height;

var ctx = canvas.getContext("2d");
ctx.drawImage(this, 0, 0);

var dataURL = canvas.toDataURL("image/png");

org.src = dataURL;
console.log(dataURL);
}
}
var imgs = document.getElementsByTagName("img");
for (var index=0; index < imgs.length; index++) {
embedImg(imgs[index]);
}

而且它工作得很好(我的网页没有引用任何跨域图像)!它将所有图像嵌入到 HTML 页面中。有谁知道可能是什么问题?

这是我的 index.html 文件的内容:

<!DOCTYPE html >
<html>
<head>
<meta charset="utf-8" />
</head>

<body>
<img src="1.png" >
</body>
</html>

和实际输出(output.txt):

Unsafe JavaScript attempt to access frame with URL  from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

Unsafe JavaScript attempt to access frame with URL from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file://./embed_images.js. Domains, protocols and ports must match.

奇怪的是,虽然我的页面上只有一张图片,但有很多错误消息!

我正在使用 phantomjs-1.9.8-linux-x86_64

最佳答案

调用 phantom.exit 时会打印这些通知。它们不会造成任何麻烦,但当您需要干净的 PhantomJS 输出时,它们就不好用了。在您的情况下,您可以像这样通过“异步化”phantom.exit 来抑制通知:

setTimeout(function(){
phantom.exit();
}, 0);

我认为发生这种情况的原因是当 phantom 试图退出时从页面上下文传递了一个大字符串。

我创建了一个 github issue为此。

关于javascript - 使用 PhantomJS 嵌入网页的所有图像会产生警告但有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26608391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com