用于加载活动标签页面来源的Chrome扩展程序

时间:2013-09-02 14:57:28

标签: javascript jquery google-chrome google-chrome-extension

我希望你能帮助我。

我正在尝试在Chrome中创建一个扩展程序,它会将活动标签的来源加载到变量中。

到目前为止,我有:

的manifest.json

{
"name": "My Extension",
"manifest_version": 2,
"version": "0.1",
"description": "Does some simple stuff",
"browser_action": {
    "default_icon": "logo.png"
},

"background": {    
"scripts": ["main.js"]}}

main.js

chrome.browserAction.onClicked.addListener(
  function(tab) {
   var ps1 = document.getElementsByTagName('html')[0].innerHTML;
   window.alert(ps1);
});

但是会加载空白页面的页面源。我需要做什么才能获得活动页面的来源。

我已经做了一些阅读,我认为我需要使用内容脚本,一些听力功能,我一直在搜索,但所有答案在我看来都非常复杂。你们中的任何人都会如此友好地给我一些简单的例子吗?

非常感谢您的反馈!

此致


AdrianCooney回答后的更新:

我将清单改为包含

 "permissions": [
  "tabs"
  ]

然后在main.js中我做了

chrome.browserAction.onClicked.addListener(function(activeTab) {
 chrome.tabs.query({ currentWindow: true, active: true }, 
  function (tabs) {
   var ps1=document.getElementsByTagName('html')[0].innerHTML;
   window.alert(ps1);
 })
});

当我按下扩展按钮时,我会得到类似的内容

<html></html>
  <body><script src="main.js"></script>
  </body>

...无论我有什么标签,我都活跃。

使用chrome.tabs.getCurrent

进行另一次尝试
chrome.browserAction.onClicked.addListener(function(activeTab) {
 chrome.tabs.getCurrent(
  function (tabs) {
   var ps1=document.getElementsByTagName('html')[0].innerHTML;
   window.alert(ps1);
  })
 });

以上版本的main.js提供与之前版本完全相同的输出,无论我有哪个页面都有效。

4 个答案:

答案 0 :(得分:1)

后台脚本与当前页面隔离,因为它们被设计为持久,无论页面内容如何。您需要使用chrome.tabs API,特别是chrome.tabs.getCurrent。获得当前选项卡后,可以将代码注入窗口。这就是上面的代码片段。

您需要在清单文件中为您的权限添加“标签”。

答案 1 :(得分:1)

正如所指出的,您需要在活动选项卡的上下文中运行代码。一种方法是使用chrome.tabs.executeScript

chrome.browserAction.onClicked.addListener( function() {
  chrome.tabs.executeScript(
    { 
      code: "document.getElementsByTagName('html')[0].innerHTML;"
    }, 
    function (ps1) {
      window.alert(ps1);
    }
  );
});

答案 2 :(得分:1)

main.js下的这段代码有效!!!谢谢你们的提示,他们给了我很多时间!

chrome.browserAction.onClicked.addListener( 
  function(tab) {
   chrome.tabs.executeScript(
     null,{
       code:"var ps1 = document.getElementsByTagName('html')[0].innerHTML;            
       window.alert(ps1);"});
          }
);

答案 3 :(得分:0)

在Chrome 47中,您需要将“activeTab”添加到权限,否则它不起作用。使用“标签”它不起作用。

<强>的manifest.json:

{
"name": "Rafi extension",
"manifest_version": 2,
"version": "7",
"description": "Open something",
"browser_action": {
    "default_icon": "logo.png"
},
"permissions": [
  "activeTab"
  ],
"background": {    
"scripts": ["main.js"]}
}