Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加载活动选项卡的页面源的Chrome扩展_Javascript_Jquery_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 加载活动选项卡的页面源的Chrome扩展

Javascript 加载活动选项卡的页面源的Chrome扩展,javascript,jquery,google-chrome,google-chrome-extension,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": {

我希望你能帮助我

我试图在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>

上面版本的main.js提供与之前版本完全相同的输出,无论我激活了哪个页面。

后台脚本与当前页面隔离,因为它们被设计为持久性的,无论页面内容如何。具体来说,您需要使用API。一旦有了当前选项卡,就可以将代码注入窗口。这就是你上面的代码片段


您需要将“选项卡”添加到清单文件中的权限中。

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

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

这个代码在main.js下工作!!!谢谢你们的提示,他们为我节省了很多时间

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

在Chrome47中,您需要将“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"]}
}

我尝试了你的建议,也尝试了其他一些我发现的东西,最后一些东西现在起作用了,但仍然没有如预期的那样。更多想法?相关答案:。重复使用代码很容易获得当前选项卡的源代码(顺便说一句,不要忘了添加)。重复:谢谢你的代码,但我有一个问题。如何在此代码中定义ps1?我尝试了
code:“var ps1=document…”
但是警报返回
未定义的
@Matt代码按原样工作,您不必添加任何声明。回调函数将接收执行代码计算的最后一个表达式作为参数。您在下面发布的答案的问题是,您在背景脚本的上下文中没有可用的值。
{
"name": "Rafi extension",
"manifest_version": 2,
"version": "7",
"description": "Open something",
"browser_action": {
    "default_icon": "logo.png"
},
"permissions": [
  "activeTab"
  ],
"background": {    
"scripts": ["main.js"]}
}