Chrome 扩展 API:Chrome.tabs.captureVisibleTab 在背景页面上到内容脚本
Chrome Extension API: chrome.tabs.captureVisibleTab on Background Page to Content Script
我的总体目标是使用以下方法通过背景页面截取屏幕截图:
http://developer.chrome.com/extensions/tabs.html#method-captureVisibleTab
并将其传递给内容脚本,以便我可以使用页面的HTML DOM来分析屏幕截图并按照我想要的方式剪切它。
但是,我似乎无法使用消息传递将 dataUrl 传递回内容脚本:
http://developer.chrome.com/extensions/messaging.html
我尝试了JSON.stringify(),但无济于事。
这工作得很好:
background.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
sendResponse({imgSrc:'hello'});
}
);
我将代码切换到此,但没有任何通过:
background.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
chrome.tabs.captureVisibleTab(
null,
{},
function(dataUrl)
{
sendResponse({imgSrc:dataUrl});
}
)
}
);
我唯一证明背景页面实际上是截图的证据是我可以做
chrome.tabs.captureVisibleTab(null,{},function(dataUrl){console.log(dataUrl);});
我看到
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAA....等等..."
登录后台.html,有效
我的问题是:如何将此 URL 发送到内容脚本?
我宁愿不在后台页面上执行所有无法控制实际可见页面上的任何内容的逻辑。
使用 chrome.tabs.sendMessage
并确保return true
,而不是事件侦听器
背景页面:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
chrome.tabs.captureVisibleTab(
null,
{},
function(dataUrl)
{
sendResponse({imgSrc:dataUrl});
}
);
return true;
}
);
内容脚本
chrome.runtime.sendMessage({msg: "capture"}, function(response) {
console.log(response.dataUrl);
});
相关文章:
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- java脚本在Chrome和其他浏览器中对LocaleTimeString的不同行为
- 如何让JS脚本在导航后继续运行(谷歌chrome控制台)
- 是否可以通过Chrome扩展内容脚本打开Chrome外部协议请求
- 在chrome web商店中打开时,是否有允许执行内容/后台脚本的解决方案
- Google Chrome扩展程序可以检测所有脚本何时加载完成吗
- 加载Chrome扩展中的脚本错误
- chrome扩展-内容脚本随需应变
- Chrome存储API无法使用内容脚本
- Chrome内容脚本制作cookie;chrome重新启动时,cookie会被删除.如何使其稳定
- Chrome扩展:加载窗口后执行脚本
- 如何动态添加或删除Chrome扩展、内容脚本、javascript文件
- 内容安全策略指令:;脚本src'self'blob:文件系统:chrome扩展资源:“;获取是否时
- Chrome审核:在外部CSS文件之间的头中发现了1个内联脚本块&”;
- Chrome没有加载最新版本的web工作程序脚本(运行缓存版本)
- FF和Chrome中的 ftp:// 网页不会加载 file:// 脚本
- 直接导航到chrome中的页面时未加载Javascript脚本
- Chrome“脚本只能关闭由它打开的窗口”错误
- Chrome脚本内存优化
- chrome脚本或CLI打开URL和捕获屏幕