2014-09-24 75 views
2

我试图创建一个Chrome扩展,在弹出窗口中显示当前页面的DOM。在Chrome扩展弹出窗口中获取DOM?

作为一个热身,我试着把一个字符串放在getBackgroundPage().dummy,而这个popup.js脚本可见。但是,当我尝试在getBackgroundPage().domContent中保存DOM时,popup.js将其视为undefined

任何想法在这里可能会出错?

我看着this related post,但我无法完全弄清楚如何使用该帖子的课程来学习我的代码。


代码:

background.js

chrome.extension.getBackgroundPage().dummy = "yo dummy"; 

function doStuffWithDOM(domContent) { 
    //console.log("I received the following DOM content:\n" + domContent); 
    alert("I received the following DOM content:\n" + domContent); 
    //theDomContent = domContent; 
    chrome.extension.getBackgroundPage().domContent = domContent; 
} 

chrome.tabs.onUpdated.addListener(function (tab) { 
    //communicate with content.js, get the DOM back... 
    chrome.tabs.sendMessage(tab.id, { text: "report_back" }, doStuffWithDOM); //FIXME (doesnt seem to get into doStuffWithDOM) 
}); 

content.js

/* Listen for messages */ 
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) { 
    /* If the received message has the expected format... */ 
    if (msg.text && (msg.text == "report_back")) { 
     /* Call the specified callback, passing 
      the web-pages DOM content as argument */ 

     //alert("hi from content script"); //DOESN'T WORK ... do we ever get in here? 
     sendResponse(document.all[0].outerHTML); 
    } 
}); 

popup.js

document.write(chrome.extension.getBackgroundPage().dummy); //WORKS. 
document.write(chrome.extension.getBackgroundPage().domContent); //FIXME (shows "undefined") 

popup.html

<!doctype html> 
<html> 
    <head> 
    <title>My popup that should display the DOM</title>  
    <script src="popup.js"></script> 
    </head> 
</html> 

manifest.json的

{ 
"manifest_version": 2, 
"name": "Get HTML example w/ popup", 
"version": "0.0", 

"background": { 
    "persistent": false, 
    "scripts": ["background.js"] 
}, 
"content_scripts": [{ 
    "matches": ["<all_urls>"], 
    "js":  ["content.js"] 
}], 
"browser_action": { 
    "default_title": "Get HTML example", 
    "default_popup": "popup.html" 
}, 

"permissions": ["tabs"] 
} 

回答

0

你得到的chrome.tabs.onUpdated错误的语法。

在background.js

chrome.tabs.onUpdated.addListener(function(id,changeInfo,tab){ 
    if(changeInfo.status=='complete'){ //To send message after the webpage has loaded 
     chrome.tabs.sendMessage(tab.id, { text: "report_back" },function(response){ 
      doStuffWithDOM(response); 
     }); 
     } 

})

+0

这不起作用。任何人对此的答案? – Suisse 2016-03-16 21:03:45

相关问题