相关疑难解决方法(0)

使用内容脚本将代码插入页面上下文

我正在学习如何创建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

452
推荐指数
5
解决办法
24万
查看次数

调用chrome.tabs.query后,结果不可用

我正在创建(学习)Google Chrome的扩展程序.

为了调试一些代码,我插入console.log()了如下:

var fourmTabs = new Array();
chrome.tabs.query({}, function (tabs) {
    for (var i = 0; i < tabs.length; i++) {
        fourmTabs[i] = tabs[i];
    }
});
for (var i = 0; i < fourmTabs.length; i++) {
    if (fourmTabs[i] != null)
        window.console.log(fourmTabs[i].url);
    else {
        window.console.log("??" + i);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是非常简单的代码:将所有选项卡信息放入我自己的数组中,并打印一些东西.

要检查代码是否正常工作,我运行代码.问题出现了:

  • 当我使用断点(通过开发人员工具)时,代码运行正常.
  • 没有断点,不会打印任何内容.

知道为什么吗?

javascript asynchronous breakpoints google-chrome-extension google-chrome-devtools

21
推荐指数
1
解决办法
1万
查看次数

chrome.runtime.sendMessage无法按预期工作

我正在编写一个带有内容脚本和后台脚本的Chrome插件,我正在尝试让两者进行通信.

在我的内容脚本中,我正在做

chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
      console.log(response.farewell);
});
Run Code Online (Sandbox Code Playgroud)

在我的后台脚本中,我正在做

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        console.log(sender.tab ?
          "from a content script:" + sender.tab.url :
          "from the extension");
        if (request.greeting == "hello")
            sendResponse({farewell: "goodbye"});
    }
);
Run Code Online (Sandbox Code Playgroud)

我的清单看起来像这样:

{
    "manifest_version": 2,
    "name": "Tesing Phase",
    "version": "1.0",
    "background": {
        "persistent": false,
        "scripts": ["bgscript.js"]
    },
    "content_scripts": [{
        "js": ["contentscript.js"],
        "all_frames": true,
        "run_at" : "document_start",
        "matches": ["*://*/*"]
    }],
    "web_accessible_resources": ["script.js"]
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的插件时,我收到以下错误:

Uncaught TypeError: Object #<Object> has no method 'sendMessage' 
Run Code Online (Sandbox Code Playgroud)

我尝试记录chrome.runtime,没有方法sendMessage.我在Ubuntu上使用Chromium 25.0版.我也试过使用 …

chromium google-chrome-extension

13
推荐指数
1
解决办法
2万
查看次数