我正在学习如何创建Chrome扩展程序.我刚开始开发一个来捕捉YouTube活动.我想将它与YouTube Flash播放器一起使用(稍后我将尝试使其与HTML5兼容).
manifest.json的:
{
"name": "MyExtension",
"version": "1.0",
"description": "Gotta catch Youtube events!",
"permissions": ["tabs", "http://*/*"],
"content_scripts" : [{
"matches" : [ "www.youtube.com/*"],
"js" : ["myScript.js"]
}]
}
Run Code Online (Sandbox Code Playgroud)
myScript.js:
function state() { console.log("State Changed!"); }
var player = document.getElementById("movie_player");
player.addEventListener("onStateChange", "state");
console.log("Started!");
Run Code Online (Sandbox Code Playgroud)
问题是控制台给了我"开始!" ,但没有"状态改变!" 当我播放/暂停YouTube视频时.
将此代码放入控制台时,它可以正常工作.我究竟做错了什么?
javascript google-chrome youtube-api google-chrome-extension content-script
是否可以在页面加载之前注入JS,还是需要使用内容脚本和文档完成的方式?
例如,是否有更快的方式来执行JS,一旦打开页面就会将页面变为红色?
这是一个简单的页面:
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test page</title>
<script type="text/javascript">
function foo (num) {
alert(num);
}
</script>
</head>
<body>
Hello World
<script type="text/javascript">
foo(2);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想写一个Chrome扩展程序,以防止执行底部脚本(foo(2)).
我尝试编写一个内容脚本,删除最后一个脚本标记:
document.body.removeChild(document.body.lastChild);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我想这可能是因为内容脚本在最后一个脚本行执行后运行.然后我试着设置run_at为document_start或document_end,但它们都不适合我..
我想知道如何检测播放前未添加到 DOM 的“音频”元素。创建元素的代码是:
var snd = new Audio("short.mp3");
snd.volume = 1;
snd.play();
Run Code Online (Sandbox Code Playgroud)
音频源可能会改变。
稍后,当所选选项卡发出声音时,我将使用 chrome 扩展将一些 JS 注入到页面中。然后代码应该运行并使用音频源执行 console.log。
我如何检查这个从未添加到 DOM 的元素的相关内容?
PS:我无法更改播放音频的代码。
我正在尝试构建一个 chrome 扩展;在这方面的经验很少。我按照使用内容脚本将代码插入到页面上下文中,使用第一种方法将 js 代码注入到页面中。
我正在尝试在其他人的代码上构建一个js框架,该框架严重依赖于警报,这些警报破坏了我的覆盖层的功能,所以我只想让它们安静一下——实际上,我宁愿将消息传递到控制台.log 但我会采取我在这个阶段能得到的东西。因此,我尝试遵循JavaScript:重写alert()来设置要注入的最终js文件(nogo.js)。
nogo.js 被注入,但它似乎没有抑制警报的效果。难道是因为另一个 html 文件本身是由另一个 js 文件启动的,所以注入发生得太慢或无序?
清单.json
"content_scripts": [
{
"matches": ["*://URL/*"],
"js": ["myscript.js"],
"run_at": "document_end",
"all_frames": true
},
{
"matches": ["*://URL/*"],
"js": ["noalerts.js"],
"run_at": "document_start",
"all_frames": true
}
],
"web_accessible_resources": ["script.js","nogo.js"]
}
Run Code Online (Sandbox Code Playgroud)
myscript.js
var s = document.createElement('script');
// TODO: add "script.js" to web_accessible_resources in manifest.json
s.src = chrome.extension.getURL('script.js');
s.onload = function() {
this.remove();
};
(document.head || document.documentElement).appendChild(s);
Run Code Online (Sandbox Code Playgroud)
noalerts.js
var n = document.createElement('script');
// TODO: add "script.js" to web_accessible_resources …Run Code Online (Sandbox Code Playgroud) Chrome扩展程序是否可以通过某种方式检测到在外部网站页面加载后立即显示的警报框?我知道一旦出现警告框,JavaScript执行就会暂停。
某个网站会发出特定的警报,我需要能够收听。理想情况下,我想提取警报中的文本。