我正在学习如何创建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
我是浏览器扩展开发的新手,我理解浏览器扩展的概念,改变页面并将代码注入其中.
有没有办法可以扭转这个方向?我编写了一个提供一组API的扩展程序,想要使用我的扩展程序的网站可以检测到它的存在,如果它存在,网站可以调用我的API方法,如var extension = Extenion(foo, bar).这可以在Chrome,Firefox和Safari中使用吗?
例:
谷歌创建了一个名为BeautifierExtension的新扩展.它有一组API作为JS对象.
用户访问reddit.com.Reddit.com检测BeautifierExtension并通过调用来调用APIbeautifer = Beautifier();
请参阅#2 - 通常它是检测匹配站点并更改页面的扩展.我有兴趣知道的是#2是否可行.
javascript google-chrome firefox-addon google-chrome-extension safari-extension
正如问题所说,我只想知道chrome扩展中后台脚本和内容脚本之间的区别.当我在两个脚本中记录chrome对象时,我发现了不同的对象.
我想在点击图标时将我的javascript注入页面所以在manifest.json我添加内容脚本但我无法在内容脚本中收听图标点击事件.
chrome.browserAction未在内容脚本中的chrome对象中定义.
如何在内容脚本中侦听单击事件.我们可以同时包含背景和内容脚本吗?
这是我的manifest.json
{
"name": "First Plugin Testing",
"version": "1.0",
"manifest_version": 2,
"description": "Trying hands on first extension",
"background": { "scripts": ["background.js"] },
"browser_action": {
"default_icon": "icon.png"
},
"permissions": [
"tabs", "http://*/*", "https://*/*"
],
"content_scripts": [
{
"matches": ["http://*/*"],
"js": ["temp.js"]
}
]
}
Run Code Online (Sandbox Code Playgroud) 我想将任何网页上的文本(使用内容脚本来处理选择)记录到弹出资源的数据库中,以便在一个地方收集文本.
我正在尝试我在弹出页面中创建一个数据库并尝试从内容脚本管理它虽然弹出窗口不是活动的(未打开)使用chrome消息但不能使弹出窗口从内容脚本接收任何消息.
我不确定使用消息传递来解决这个问题.有没有更好的解决方案?
尝试在我的内容和后台脚本之间进行通信时,我收到以下错误:
Port error: Could not establish connection. Receiving end does not exist.
Error in event handler for 'undefined': Cannot read property 'message' of undefined
TypeError: Cannot read property 'message' of undefined
Run Code Online (Sandbox Code Playgroud)
background.js
function onRequest(request, sender, callbackFunction) {
console.log("Me (BS) became this Message:" + request.message);
sendResponse({message: request.message})
};
chrome.extension.onRequest.addListener(onRequest);
Run Code Online (Sandbox Code Playgroud)
streamcloud.js
function contactBackground(nachricht){
chrome.extension.sendMessage({message: nachricht}, function(response) {
console.log("The Background Script got the following Message: " + response.message);
});
}
Run Code Online (Sandbox Code Playgroud)
和我的manifest.json
{
"name": "InstantWatch - Dev",
"manifest_version": 2,
"version": "0.7",
"permissions": ["tabs", …Run Code Online (Sandbox Code Playgroud) 我是Chrome扩展程序的新手,想了解所有类型的脚本/页面是如何工作的.
这是我的理解:
首先 - 有"内容脚本",应该用于实际修改页面.
第二 - 有一个"后台脚本",设计用作发送和接收消息的服务器,但它不会修改页面的DOM; 因此它可以执行诸如处理存储和脚本之间的通信但不修改页面之类的任务.
最后 - 有"弹出脚本",它们与内容脚本和后台脚本分开,但您仍然可以在它们之间发送/接收消息.
弹出脚本不能直接修改页面(与后台脚本相同),它们只能向其他两个发送消息.
你根本不在清单文件中声明它们,你可以直接在弹出的html文件中使用它们.
最后,只有内容脚本最终才能真正修改页面.
我对么?
定义: 请从一开始就注意到,通过"注入脚本","扩展代码"和"内容脚本",我将使用此问题的优秀第一个答案中提供的定义.
假设:如果我在注入的脚本(在Web区域中)直接执行机密信息,那么处理机密信息的安全性就低于我在内容脚本和扩展代码的chrome://区域内执行机密信息的安全性.因此,我应该使用消息传递将机密信息从Web区域发送到chrome://区域以便进行处理.
问题:我正在构建Google Chrome扩展程序,我需要对从我注入的脚本派生的敏感用户数据运行一些操作.有问题的数据是保密的,我必须尽我所能确保除了扩展用户之外,任何人都看不到它,直到我对它进行操作.可以用于在注入的脚本和扩展代码/内容脚本之间传递消息的3种技术(定义如下)中最适合此目的的技术?
我对可用于在注入的脚本和扩展代码/内容脚本之间传递数据的3种不同技术的理解:
对于在注入的脚本和扩展代码(例如后台页面)之间传递消息,可以使用chrome.runtime API.
对于在注入的脚本和内容脚本之间传递消息,可以使用window.postMessage.
在注入的脚本和内容脚本之间传递消息的另一种方法是通过document.dispatchEvent(CustomEvent).
我的理解是方法1.不能用于注入脚本和内容脚本之间的消息传递,而方法2和3.不能用于注入脚本和扩展代码之间的消息传递(除非消息由内容转发)脚本,例如,背景页面).
javascript security google-chrome message-passing google-chrome-extension
我已阅读并重新阅读此页面,以及运行示例:
http://code.google.com/chrome/extensions/background_pages.html
但我似乎没有掌握如何在background.html,popup.html和content.js之间进行背景通信.我想发送消息来触发函数,获取响应并处理这些响应.地图样本有点接近帮助我,但我只是需要一些超级简单而且不需要所有地图的东西.(注意,我知道jQuery以及Javascript,所以如果你愿意,可以随意混合一些jQuery.)
在我的扩展中,我需要将一些数据从一个选项卡的内容脚本传输到另一个选项卡的内容脚本.如果我知道该标签对象的名称或网址的一部分,我如何使用chrome.tabs选择某个标签?两个标签的脚本如何通信?
更新:
显然我在chrome.extension中没有方法sendMessage.当我从内容脚本运行以下内容时:
chrome.extension.sendMessage("message");
Run Code Online (Sandbox Code Playgroud)
我进入控制台:
未捕获的TypeError:对象#没有方法'sendMessage'