相关疑难解决方法(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的扩展程序内容脚本中访问iframe内容

我正在做一个插件来对界面进行一些转换.我一直在unsafe javascript attempt to access frame with url.... Domains, protocols and ports must match(典型的跨站点问题)

但作为扩展程序,它应该可以访问iframe的内容http://code.google.com/chrome/extensions/content_scripts.html ...

没有人知道如何访问它的内容,以便它们可以被捕获吗?

html security iframe google-chrome-extension

34
推荐指数
2
解决办法
3万
查看次数

window.open在chrome扩展中返回undefined

我有基于内容脚本的Chrome扩展程序.我通过内容脚本中的弹出窗口启动登录过程.

我使用下面的代码打开一个弹出窗口,然后等到它关闭.

但是,我从window.open方法中获得了"未定义" .有人知道为什么会这样吗?

loginwinundefined在下面的代码虽然弹出窗口打开了罚款规定login_url.下面的代码是从我的内容脚本中调用的.

var loginWin = window.open(login_url, 'LoginWindow', "width=655,height=490");
console.log(loginWin);
// Check every 100 ms if the popup is closed.
var finishedInterval = setInterval(function() {
    console.log('checking if loginWin closed');
    if (loginWin.closed) {
        clearInterval(finishedInterval);
        console.log('popup is now closed');
        Backbone.history.navigate('index', true);
    }
}, 1000);
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome popup google-chrome-extension

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

在Chrome扩展程序中,内容脚本不会影响iframe内部?

在manifest.json文件中,我声明我想要注入一些脚本,如下所示:

{
    "name": "my extension",

    "version": "1.0",

    "background_page": "background.html",

    "permissions": ["contextMenus", "tabs", "http://*.example.com/*"],

    "content_scripts": [
        {
            "matches":
                [
                "http://*.taobao.com/*",
                "http://*.yintai.com/*"
                ],
            "run_at": "document_idle",
            "js": ["jquery-1.5.1.min.js","jquery-ui-1.8.13.custom.min.js", "contentscript.js"],
            "all_frames": true
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在内容脚本中,我创建了一个iframe等.它到目前为止工作正常.像这样:

$('<div id="my_notifier"></div>').appendTo($('body')).html('<iframe src="http://example.com"></iframe>');
Run Code Online (Sandbox Code Playgroud)

问题是,在iframe内部,它不会从内容脚本继承任何内容.如果我想使用jQuery,我必须使用<script src=...它再次包含在iframe中.

我不想再次包含jQuery,因为我已将它放在扩展中.我不希望用户在扩展程序需要运行的每个页面上一次又一次地下载jQuery.

我已经尝试了该属性"all_frames": true,但它不起作用.

请指教.谢谢.

编辑:我将example.com添加到matches属性中,如下所示:

"content_scripts": [
    {
        "matches":
            [
            "http://*.taobao.com/*",
            "http://*.yintai.com/*", 
            "http://*.example.com/*"
            ],
        "run_at": "document_idle",
        "js": ["jquery-1.5.1.min.js","jquery-ui-1.8.13.custom.min.js", "contentscript.js"],
        "all_frames": true
    }
]
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

更清楚的是,iframe(example.com)的内容是:

<!DOCTYPE HTML>

<html>
<head>
    <title>Untitled</title>
</head>

<body>

<div></div>

<script type="text/javascript">
    $('div').html('hi');  

</script> …
Run Code Online (Sandbox Code Playgroud)

google-chrome-extension

5
推荐指数
1
解决办法
6813
查看次数