Google Chrome 扩展程序就像在控制台中一样运行?

use*_*920 2 javascript google-chrome google-chrome-extension deezer

我正在尝试制作一个 Google Chrome 扩展程序,可以在 DEEZER (www.deezer.com) 中暂停/播放付款人。我playercontrol.doAction('next')在 Google chrome JavaScript 控制台中手动运行代码“ ”,我可以操纵 deezer 播放器,所以我查看了将代码注入带有扩展名的 Deezer 网页的可能性,但我还没有成功地做到这一点. 是否可以在 Deezer 网页中运行 JavaScript 代码,就像它来自 Google Chrome 中的控制台一样?如果是这样怎么办?

fro*_*sty 6

您在这里面临的问题如下:

  1. 您需要使用 content_scripts 而不是从后台页面运行代码。
  2. 从后台页面运行的代码和作为内容脚本运行的代码是“沙盒化的”。这意味着您的代码无权访问页面创建的全局变量。您的扩展程序无权访问它。好消息是你仍然可以做到。不过,你必须很聪明。

在您的扩展程序中,您必须将新的 Script 标记注入页面的“头部”。您必须创建一个新的脚本标记并将其附加到页面的头部。在追加之前,您需要将脚本标签的“innerHTML”设置为您要运行的 JavaScript。这是您需要做的事情的要点。

var myJavaScript = "alert('hey guys');";    //You need to put your JS here. 
var scriptTag = document.createElement("script");
scriptTag.innerHTML = myJavaScript;
document.head.appendChild(scriptTag);
Run Code Online (Sandbox Code Playgroud)

这会将新的脚本标签放入头部,从而绕过 Chrome 扩展程序的安全性。这将使新脚本能够访问页面上的常规全局变量,即:您将可以访问“playercontrol”对象。

  • 我已经在这个问题上坐了很长时间了,这对我来说很有魅力!我试图访问选择 html 字段的 React 属性,但 Object.getOwnPropertyNames 只返回 HTML 选项元素,而不是 __reactEventHandlers-properties 等。非常头疼!在此处与您的代码段一起使用。 (2认同)