我正在学习如何创建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
我在我的网页html代码中有这个js函数.
function update() {
document.getElementById( "textbox ").value = updatetext;
}
Run Code Online (Sandbox Code Playgroud)
当我从chrome控制台执行"update()"时,它可以工作.
但是如果我从chrome扩展程序执行,
chrome.tabs.executeScript(tab.id, {code: "update();"}, function(result){});
Run Code Online (Sandbox Code Playgroud)
它说没有定义更新.但如果我用"alert('ok')替换",它就有效.
然后我执行
eval("update()")
Run Code Online (Sandbox Code Playgroud)
在Chrome扩展程序内容脚本中.它还说"未定义更新".
那么我该怎么做才能在网页上调用js函数呢?
我正在写一个chrome扩展,我正在努力将一个对象从主页传递回上下文脚本.我似乎无法访问窗口的变量.
ContextScript
//STORE DATA TO CHROME STORAGE ON EVENT
//create hidden input
var hiddenInput = document.createElement("input");
hiddenInput.setAttribute("type", "text");
hiddenInput.setAttribute("id", "__HIDDEN__RESULT__");
//add input to page
var currentItem = document.body.appendChild(hiddenInput);
//event to be fired on click
currentItem.onclick = function() {
//get the global variable window.listOfCourses and stick it in storage
chrome.storage.local.set({'dataVault' : window.listOfCourses});
};
//inject script into page
var s = document.createElement("script");
s.src = chrome.extension.getURL("gradebook.js");
s.onload = function() {this.parentNode.removeChild(this);};
(document.head||document.documentElement).appendChild(s);
Run Code Online (Sandbox Code Playgroud)
注入的脚本
function processData()
{
window.listOfCourses = [];
for (i=0; i < window.completedData.length; …Run Code Online (Sandbox Code Playgroud) 我有一个HTML页面,其中有一些DOM配置了Angular.现在我正在构建一个chrome扩展来修改文本框中的值.element.value= newValue因为文本框是使用Angular设计的,所以不起作用.在阅读了一些资源后,我才知道我需要对元素的范围进行更改.我尝试在扩展中执行此操作.
var eleScope = window.angular.element(document.querySelector('.textbox')).scope();
eleScope.$apply(function() {
eleScope.item.request.box = newValue;
});
Run Code Online (Sandbox Code Playgroud)
这似乎没有按预期工作.当我更深入地研究这个问题时,我开始知道窗口范围内的角度没有得到正确的范围.
我也尝试从我的扩展中注入angular.js并angular.element直接使用,这似乎也没有解决问题.
我错过了什么.感谢您的回复.
我正在创建Google Chrome扩展程序(我的第一个扩展程序),并且我希望将扩展程序中的邮件发送到当前选项卡.
我正在关注文档:
https://developer.chrome.com/apps/runtime#event-onMessage
该扩展将一个小的外部JS加载到选项卡的HTML中,该HTML包含以下代码:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(request)
}
);
Run Code Online (Sandbox Code Playgroud)
加载JS后,我收到以下错误:
Uncaught TypeError: Cannot read property 'onMessage' of undefined.
打开控制台和键入chrome,我可以看到运行时不是属性chrome.
看起来我做错了什么,但是什么?我需要在manifest.json文件中添加内容吗?
Chrome版本39.0.2171.71米
谢谢.
这是一个非常简单的例子:
清单文件
{
...
"content_scripts": [
{
"js": [
"/js/external/jquery-2.1.3.min.js",
"/js/content_script.js"
],
...
}
],
...
}
Run Code Online (Sandbox Code Playgroud)
content_script.js
function demo() {
alert('demo');
}
$(function() {
$( "body" ).prepend(
"<input type=\"button\" value=\"Press me\" onclick=\"demo()\" />"
);
});
Run Code Online (Sandbox Code Playgroud)
我在控制台中收到此错误:
{
...
"content_scripts": [
{
"js": [
"/js/external/jquery-2.1.3.min.js",
"/js/content_script.js"
],
...
}
],
...
}
Run Code Online (Sandbox Code Playgroud)
如何让功能发挥作用?