gpt4 book ai didi

javascript - 如何通过 chrome.experimental.offscreenTabs.toDataUrl 正确生成图像?

转载 作者:行者123 更新时间:2023-11-30 08:58:12 24 4
gpt4 key购买 nike

我遇到了一个问题: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) 中成功测试,但这并不意味着该代码在更高版本中仍然有效。
这个答案是对 How to use the experimental offscreenTab API? 的跟进


chrome.experimental.offscreenTabs.create 的回调函数在创建选项卡时调用。使用 chrome.webRequest 进行测试API 和 UNIX netcat命令表明可以在服务器响应之前触发回调。因此,不太可能在呈现页面后触发回调。

我的演示扩展包含 5 个文件。简要说明它们的作用:

  • manifest.json - 扩展所需的胶水(参见 documentation )。
  • sayhello.js - A content script通知后台页面。这个助手是必需的,因为 chrome.tabs chrome.webRequest 没用:chrome.tabs 的事件监听器屏幕外选项卡永远不会触发,chrome.webRequest 的事件监听器在呈现页面之前触发。
  • background.js - 接收 message 的后台页面从内容脚本。 chrome.extension.getViews() 用于定位启动屏幕外选项卡的 View 。
  • options.html - 启动屏幕外选项卡的可见 View 。 (后台页面无法启动屏幕外选项卡)。
  • options.js - 当 list 版本 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);
};
});

关于javascript - 如何通过 chrome.experimental.offscreenTabs.toDataUrl 正确生成图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11606135/

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