问题标签 [content-script]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
41272 浏览

javascript - 如何在页面的 Javascript 执行后加载内容脚本?

我的扩展应该加载一个内容脚本 searchTopic.js,只有在它注入的页面已经完全加载之后(是的,我在扩展清单中将“run_at”设置为“document_end”),但实际上它是在之前加载的所有 DOM 对象都已创建(关键的对象是通过页面中的一些 Javascript 创建的)。所以,问题是,我怎样才能等到页面的 Javascript 执行完毕?这是我的清单:

0 投票
0 回答
294 浏览

google-chrome-extension - 通过内容脚本注入的代码被删除

我正在创建一个 Chrome 扩展程序,它将在标签上方绘制一个显示 Flash 内容的图像。我已经在我的“contentscript.js”文件中编写了内容脚本,它只是通过脚本标签将另一个脚本文件“backgroundscript.js”插入到页面的正文中。

该代码适用于少数具有 Flash 视频的网站,并在 Flash Player 窗口的正上方显示图像,但在其他网站上则不显示。同样在少数情况下,它会出现几分之一秒,然后消失。

下面是我的清单文件:

我还通过插入“调试器”进行了检查;通过控制台进入我的脚本并监控代码执行;该脚本至少被添加到页面正文中一次。即使在没有显示图像按钮的情况下。

这是在不显示我的按钮的更高级网站上实施的某种 anit-XSS 控件吗?

我非常感谢您的帮助,因为过去几周我一直在努力克服这个问题,但没有成功:(

编辑:

请参阅下面的内容脚本:

目标站点:

  1. 不显示按钮:http ://www.metacafe.com
  2. 显示按钮片刻:http ://www.dailymotion.com
  3. 正确显示按钮:http ://www.myreviewalarm.com

请看一下 backgroundscript.js 的内容:

0 投票
3 回答
11570 浏览

javascript - 如何在 Chrome 扩展程序中使用给定的字符/键码初始化键盘事件?

我正在开发一个在网页上模拟键盘事件的 Google Chrome 扩展。

我发现由于这个 webkit 错误event.initKeyboardEvent()而无法正常工作, 并且我还找到了一些解决方法,例如SO Question

但是,在事件对象上定义属性不起作用,因为扩展的内容脚本有自己的“平行世界”,因此内容脚本中定义的属性对网页脚本不可见。

我唯一也是最后的希望 DOM 4 事件构造函数在 Google Chrome 中工作,并且可以通过构造函数正确初始化键盘事件

不幸的是,它失败了:

我无法在 Chrome 中找到有关支持的事件构造函数的任何文档。谁能指出我一些文档/源代码?

在 Google Chrome 扩展程序中模拟键盘事件的任何其他方式?

(注意,TextEvent 无济于事,因为许多现实世界的控件都听keydown/keyup专门听)

0 投票
1 回答
3146 浏览

javascript - 如何从 content_script 向外部站点发出请求

我正在尝试制作一个 chrome 扩展,它将在我的 Gmail 中显示一个弹出窗口,其中包含来自我的外部服务器的一些信息,比如今天的天气。

我试过的

  1. 我曾尝试在 chrome 扩展中包含 js,但随后尝试对我的服务器进行 AJAX 调用违反了同源策略。所以那个选项不起作用。
  2. 因此,我尝试将我的 js 文件保存在服务器上并在页面加载时加载它。

我的 manifest.json 看起来像这样:

我在其他地方读到内容脚本不能包含在外部 URL 中,所以我认为这不起作用。这里的正确方法是什么。我怎样才能有一些在 Gmail 中运行的 javascript 代码,可以从我的服务器请求信息?例如,Smartr是如何做到的?

0 投票
1 回答
1520 浏览

google-chrome - 动态 html iframe 中的内容脚本和操作 chrome 函数

我一直在开发一个 chrome 扩展,它从我的服务器获取 html 内容,在页面中创建一个 iframe 并将 html 注入其中。因此,没有“src”属性,因此,我的内容脚本没有被注入。

清单.js

背景.js

框架.js

工具栏.js

现在,iframe 拥有一个工具栏,其中包含与浏览器相关的功能,例如清除历史记录等。用 HTML 来说,有一个锚点,onclick 应该向扩展发送消息,发送“clearHistory”命令。这些功能需要 chrome 扩展访问 chrome.history 和 chrome.management,所以我需要在 html 对象和父扩展之间传递消息。

问题是 iframe 没有注入 frame.js 脚本,即使它的 src 设置为某个本地文件。也许我做错了什么,但我找不到注入脚本的方法。我什至不确定注入脚本会允许这种机制。

我试图获取脚本的相对 url (chrome.tab.getURL) 并且脚本实际上被注入了,但是 console.log(chrome) 没有显示扩展对象或我可以使用的任何方法(我相信这是由于手动注入)

你怎么看?

0 投票
1 回答
109 浏览

google-chrome - 如何通过重写 include_matches 来解决 exclude_matches 错误而无需编程注入?

我正在构建一个 Chrome 扩展程序,但由于 Chrome 中的错误导致exclude_matchesCSS 失败,我遇到了问题。我知道有一些方法可以使用 Programmatic Injection 绕过它,但这会导致一些性能问题,所以我想知道是否有人可以想办法以include_matches不包括我想要排除的内容的方式重写我的(因为任何不匹配的东西都会被自动排除)。这是一个很长的镜头,但我想如果有人能做到,他们就会在这里!一个可以使用的示例将是以下代码:

显然,上面涵盖了 上的任何链接example.com,但我想知道是否有办法以这种方式重写它,使 URLexample.com/z/不符合规则,但诸如此类的 URLexample.com/z/s/仍然可以工作。

基本上,唯一不允许的 URL 是上述格式(“ /z/”)的 URL,所以我想知道是否有一种方法可以指定不允许在该位置带有斜杠的 URL。听起来很愚蠢,我想我对正则表达式的思考太多了,所以任何帮助都非常感谢!

即使我输入这个,我也觉得我可能会被 PI 卡住,但值得一试!

0 投票
1 回答
1021 浏览

javascript - Javascript 并不总是在 Chrome 扩展程序中运行,我应该什么时候运行它?

我有一个 Chrome 扩展程序,它将 CSS 和 Javascript 都注入到页面中,虽然 CSS 总是被注入,但 Javascript 有时只能工作,有时不能工作。通过不工作,我假设它在它必须处理的东西存在之前运行。

Javascript 只是简单地将 a 移到div另一个 using 之上,insertBefore但这并不总是发生,我认为这是因为它在加载时。

我的清单目前是:

我已经run_at设置为document_end目前,因为它似乎运行得更顺畅(当它确实工作时),所以我认为这就是需要改变的地方。

如果有人有任何建议,他们将不胜感激。

编辑:关于这个问题的答案的后续问题被添加在这里,我觉得如果我将它添加到这个问题中可能对其他人有用。

0 投票
1 回答
4981 浏览

javascript - 如何使用 javascript 将 X-header 字段添加到 Gmail 标头?

我正在编写一个基于 Gmail 的 Chrome 扩展程序,它需要在发送邮件之前向邮件标题添加几个专有标题字段。我的应用程序逻辑如下:用户在 Gmail 中撰写邮件并按下发送按钮后,内容脚本中的代码拦截 Click 事件并创建标题字段。所以我的问题是,如何访问可以插入新字段的邮件标题?我在 JavaMail 和 Android 中寻找类似 Message.setHeader() 的东西。

0 投票
1 回答
663 浏览

javascript - waitForKeyElements(); - 在 Chrome 扩展程序的弹出窗口中停止脚本触发?

这个问题是另一个问题的后续问题,需要提出一个新的帖子,所以如果我提到的事情可能在没有阅读其他问题的情况下不清楚,请原谅我。

使用实用程序waitForKeyElements()时,我遇到了一个问题,其中 adiv包含在同一 URL 中包含的小弹出窗口中。我的扩展程序目前正在Twitter站点上运行,我的意图是div将个人资料页面(例如http://twitter.com/todayshow)中包含的 a 移到div页面上的另一个之上。我这样做是waitForKeyElements()因为使用此实用程序解决了一些加载问题。

但是,在个人资料页面上,您可以单击指向另一个用户名的链接,该链接会弹出一个小窗口(在同一窗口/选项卡内,在同一 URL 上),显示有关他们的一些信息和一些以前的推文。这里的问题是相同的div内容出现在此弹出窗口中,然后移动到弹出窗口后面的主页,它不应该出现在此处。在个人资料页面上,可以通过将false参数插入来停止waitForKeyElements(),但是在非个人资料页面上,仍然可以激活此弹出窗口,然后将其移至主页,因为div我希望将其移至上方个人资料页面仍然存在于此,导致明显的问题。

我想知道是否有办法解决这个问题,因为Chrome 中的错误阻止了我排除这些页面。到目前为止(只是头脑风暴)我在想:

  • div在开始时不存在的页面上,创建一个空的意思false将处理该问题。
  • 以某种方式阻止脚本在给定的 URL 上触发,尽管由于 Twitter 的工作方式,这将不得不监视OnClick()以及我不确定该怎么做的页面 URL(我认为)。
  • 当弹出窗口出现时停止运行,但我几乎不知道从哪里开始。

任何帮助表示赞赏。与此问题相关的任何必要代码都可以在前两个链接中找到,我所面临的问题可以通过快速访问 Twitter 来查看。

编辑:插入false参数时,它在通过 URL 栏直接转到配置文件时起作用,如果您在配置文件上并使用链接访问配置文件,则不会插入脚本并且我的扩展程序失败。所以这也需要解决,或者完全需要一种替代方法。

0 投票
5 回答
84984 浏览

background - 从扩展背景或弹出到内容脚本的 sendMessage 不起作用

我知道这个问题已经以不同的方式被反复问过,但我尝试过所有的答案(希望我没有错过任何人),但没有一个对我有用。

这是我的扩展程序代码:

显现:

上下文菜单.js

openDialog.js

背景页面的两个警报有效,而 content_script 之一无效。

控制台日志消息:端口错误:无法建立连接。接收端不存在。

我的错在哪里?