javascript - 加载事件选项卡页面源的 Chrome 扩展程序

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

我希望你能帮助我。

我正在尝试在 Chrome 中创建一个扩展程序,它将事件选项卡的源加载到一个变量中。

到目前为止我有:

list .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"]}}

ma​​in.js

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

但这会加载空白页面的页面源。我需要做什么才能获取事件页面的来源。

我读了一些书,我想我需要使用内容脚本和一些听力功能,我一直在搜索,但所有答案在我看来都非常复杂。你们中的任何人都可以给我一些简单的例子吗?

非常感谢您的反馈!

问候


在 AdrianCooney 回答后更新:

我更改了我的 list 以包含

 "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 提供与之前版本完全相同的输出,无论我激活的是哪个页面。

最佳答案

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

您需要在 list 文件中为您的权限添加“制表符”。

关于javascript - 加载事件选项卡页面源的 Chrome 扩展程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18576077/

相关文章:

Javascript:如何防止在 SetInterval 循环被清除之前执行下一行?

javascript - 单击时交换一组元素的 CSS 样式

javascript - 像普通提示一样阻止 sweetalert

jquery - iOS 版使用 chrome 在本地获取 json 文件

JavaScript:在 Google Chrome 中获取完成、DOMContentLoaded 和加载时间

javascript - 谷歌应用程序脚本中有哪些字符串文字可用?

jquery 幻灯片中的上一个和下一个按顺序重复

javascript - 使用 jQuery 动态添加视频元素

google-chrome - Youtube缩略图(WEBP)在Firefox上不起作用

html - Chrome 复制文本尽管使用 "-webkit-user-select: none"