nea*_*sic 2 javascript json message-passing google-chrome-extension content-script
我的总体目标是通过后台页面截取屏幕截图:
http://developer.chrome.com/extensions/tabs.html#method-captureVisibleTab
并将其传递给内容脚本,以便我可以使用页面的HTML DOM来分析屏幕截图并按照我想要的方式进行切割.
但是,我似乎无法通过Message Passing将dataUrl传递回内容脚本:
http://developer.chrome.com/extensions/messaging.html
我试过JSON.stringify(),但无济于事.
这非常好用:
background.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
sendResponse({imgSrc:'hello'});
}
);
Run Code Online (Sandbox Code Playgroud)
我将代码切换到此,没有任何通过:
background.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
chrome.tabs.captureVisibleTab(
null,
{},
function(dataUrl)
{
sendResponse({imgSrc:dataUrl});
}
)
}
);
Run Code Online (Sandbox Code Playgroud)
我唯一证明背景页面实际上是截屏的是我可以做到的
chrome.tabs.captureVisibleTab(null,{},function(dataUrl){console.log(dataUrl);});
Run Code Online (Sandbox Code Playgroud)
我明白了
"数据:图像/ JPEG; BASE64,/ 9J/4AAQSkZJRgABAQAAA ....等..."
登录background.html,这是有效的
我的问题是:如何将此URL发送到内容脚本?
我不希望在后台页面上执行所有逻辑,这些逻辑无法控制实际可见页面上的任何内容.
使用chrome.tabs.sendMessage
背景页面:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
chrome.tabs.captureVisibleTab(
null,
{},
function(dataUrl)
{
sendResponse({imgSrc:dataUrl});
}
); //remember that captureVisibleTab() is a statement
return true;
}
);
Run Code Online (Sandbox Code Playgroud)
内容脚本
chrome.runtime.sendMessage({msg: "capture"}, function(response) {
console.log(response.dataUrl);
});
Run Code Online (Sandbox Code Playgroud)