我有一个问题: chrome.experimental.offscreenTabs.create
运作良好,但toDataUrl
方法所产生的图像为1个像素的高度。 我已经尽我所能,但所产生的图像toDataUrl
为我指定不显示大小。 这又如何解决?
这里是我的代码:
chrome.experimental.offscreenTabs.create({ url: "http:/www.baidu.com" }, function(offscreenTab) {
// console.log(offscreenTab);
chrome.experimental.offscreenTabs.toDataUrl(offscreenTab.id, { format: "png" }, function(imgUrl) {
$("#container").html("<img src='" + imgUrl + "' />");
});
});
该offscreenTabs
API是实验性的。 下面的解决方案已经成功地在Chromium 20.0.1132.57(Linux)的被测试,但是,这并不意味着代码仍然工作在以后的版本。
这个答案是后续如何使用实验offscreenTab API?
回调函数chrome.experimental.offscreenTabs.create
创建选项卡时被调用。 使用测试chrome.webRequest
API和UNIX netcat的命令表明,服务器响应之前的回调可以被解雇。 因此,这是不可能的呈现页面后 ,触发回调。
我演示延伸由5个文件。 它们的作用简要说明:
-
manifest.json
-对于所述延伸部(看到所需胶文档 )。 -
sayhello.js
-一个内容脚本该通知的背景页。 这个助手是必要的,因为chrome.tabs
和chrome.webRequest
是无用的:的事件监听器chrome.tabs
永远不会触发屏幕外的标签,以及事件侦听chrome.webRequest
的页面呈现之前被触发。 -
background.js
-后台网页接收邮件从内容脚本。 chrome.extension.getViews()
被用于定位该启动屏幕外标签的图。 -
options.html
-这将启动屏幕外选项卡中的可见视图。 (背景页面无法启动屏幕外卡)。 -
options.js
-当清单第2版是活动的,内嵌脚本不会被执行。 脚本必须被放置在外部文件中,并使用装<script src>
我上传的扩展http://rob.lekensteyn.nl/offscreentabs.zip 相同的文件,CRX扩展: CRX 。 不要忘记,以使实验的许可,在chrome://flags
,如果你想对它进行测试。
manifest.json
{
"name": "OffscreenTabs API test",
"version": "1.0",
"description": "offscreenTabs demo - See https://stackoverflow.com/q/11606135",
"manifest_version": 2,
"permissions": ["experimental", "<all_urls>"],
"options_page": "options.html",
"background": {"scripts": ["background.js"] },
"content_scripts": [{
"js": ["sayhello.js"],
"matches": ["<all_urls>"]
}]
}
sayhello.js
chrome.extension.sendMessage("Hello"); // Yup, that's it
background.js
chrome.extension.onMessage.addListener(function(message, sender) {
if (message === "Hello" && sender && sender.tab) {
// Message received from content script, pass information to a view
// within our extension, which processes offscreenTabs
chrome.extension.getViews({type:"tab"}).forEach(function(_window) {
if (_window.checkTab) _window.checkTab(sender.tab.id);
});
}
});
options.html
<!DOCTYPE html>
<head>
<meta charset="utf8">
<title>offscreenTabs test</title>
<script src="options.js"></script>
</head>
<body>
Enter an URL and press <kbd>Enter</kbd>.<br>
<input type="url" size="100" id="url" value="https://stackoverflow.com/users/938089/rob-w">
<img id="lastImg">
</body>
</html>
options.js
"use strict";
var collection = [];
// This function is called by the background (via the content script)
// If the tabId is recognised, take a screenshot
function checkTab(tabId) {
var index = collection.indexOf(tabId);
if (index !== -1) {
collection.splice(index, 1); // Remove tabId
toDataUrl(tabId); // Take screenshot
}
}
function create(url, width, height) {
var createProperties = {url: url};
if (width) createProperties.width = width;
if (height) createProperties.height = height;
// Create offscreen tab
chrome.experimental.offscreenTabs.create(createProperties, function(offscreenTab) {
console.log("Created " + offscreenTab.id, offscreenTab);
collection.push(offscreenTab.id);
});
}
function toDataUrl(offscreenTabId, options) {
chrome.experimental.offscreenTabs.toDataUrl(offscreenTabId, options, function(dataUrl) {
document.getElementById('lastImg').src = dataUrl;
});
}
document.addEventListener('DOMContentLoaded', function() {
// "Press Enter to load the offscreen tab and take a screenshot"
document.getElementById('url').onkeyup = function(ev) {
if (ev.keyCode == 13)
create(this.value);
};
});
文章来源: How to produce an image by chrome.experimental.offscreenTabs.toDataUrl correctly?