javascript - 如何从background.js中的当前选项卡获取文档

标签 javascript html api google-chrome-extension

我正在制作一个显示通知的chrome扩展,当用户单击通知上的按钮时,它会通过background.js在新选项卡中打开一个html文件,我需要在api调用后修改该文件,但我可以'找不到通过我的background.js访问该页面的方法。

manifest.json 权限 “权限”:[“http://*/*”、“https://*/*”、“通知”、“webNavigation”、“存储”、“选项卡”、“activeTab”、“背景” “]

background.js 的一部分

chrome.notifications.onButtonClicked.addListener(function() {
  chrome.tabs.create({'url': 'index.html'}, (tab) => {
    chrome.tabs.executeScript(tab,add_new_card());
  });
});


function add_new_card(){
  var elm= document.getElementById("cards");
  console.log(document);
  let new_card = '<div class="col-5 col-md-3 col-lg-2 p-0 mr-2 col"> ' +
                     '<div class="card"> ' +
                        '<a class="text-center" href=""> ' +
                        '<div class=" f-16 text-dark mt-4 card-title"> '+
                        '<strong class="text-capitalize">NEW CARD</strong> '+
                      '</div> </a>  </div> </div> ';
  elm.append(new_card);
}

我尝试了很多方法,但总是从 document.getElementById("cards") 中得到 null。

最佳答案

我还没有使用过“executeScript”命令,因为我总是使用通用的内容脚本,但据我在official documentation中看到的,您需要将代码插入 JS 对象 { code: '<your_actual_code>' } ,而<your_actual_code>被放入一个字符串中。

例如

chrome.tabs.executeScript({ code: "console.log('Hello World!')" }, callback);

如果您不想将代码放入完整的字符串中(我可以理解但不建议这样做),您也可以将您的方法(没有函数包装器!)排除在另一个文件中。在这种情况下,您可以通过执行代码

chrome.tabs.executeScript({ file: "/my-code.js" }, callback);

注意callback需要在您的 background.js 中再次定义并且附加时不带括号;否则,您将在 executeScript 之前立即执行回调。命令已执行!如果您不需要回调,可以将其从上面的代码示例中排除。

关于javascript - 如何从background.js中的当前选项卡获取文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58695215/

相关文章:

html - CSS 固定元素出现在内容下方

api - 如何在 PHP 中生成 QuickBlox 身份验证签名?

xml - EXI(高效 XML 交换)即将到来……XML API 准备好了吗?

javascript - 如何更改 SVG 线条的属性?

javascript - 如何增加外支架的高度?

php - onClick 不适用于 'a' 元素

javascript - Web 身份验证 - 如何安全地将用户名/密码从客户端传输到服务器

html - 如何使用关键帧在CSS中平滑地缩放div

php - CURLOPT_PUT 与 CURLOPT_POSTFIELDS

javascript - 复杂的 Div/Canvas 放置