新窗口在Click上创建,但不在页面加载时创建

时间:2015-03-05 06:47:46

标签: javascript jquery google-chrome-extension

我是chrome扩展开发的新手。试试我的第一个。

我正在尝试编写一个扩展程序,在每个页面加载时执行某个操作。

每次加载页面时都需要发送一个帖子请求。我使用ajax请求来执行此操作。成功发送请求后,我想打开一个弹出/新窗口。

这是我的清单文件

{
    "manifest_version": 2,
    "name": "Coupons",
    "version": "1.0",
    "description": "Yay! Coupons",
    "icons": { "16": "images/carbs16.png",
               "48": "images/carbs48.png",
               "128": "images/carbs128.png" },
               "browser_action": {
               "default_title": "Coupons ! Yay",
    "default_icon": "images/carbs48.png",
    "default_popup":"start.html"
},
"permissions":
    ["https://example.com/"],
    "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'",
    "content_scripts": 
    [
        {
            "matches": ["*://*/*"], 
            "js": ["jquery-2.1.3.min.js","myscript.js"],
            "run_at": "document_end"  
        }
    ]
}

这是我的myscript.js文件

$.post("https://example.com",
{
    product_name: url,
    desc:"Yo",
    price: "22"
},
function(data){
    //alert("yay")
    chrome.windows.create({'url':'void.html','type':'popup'},function(window){  

    })  
});

这是我的start.html文件:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="myscript.js"></script>
</head>
<body>
</body>
</html>

我面临的问题如下:

当我在浏览器中点击Chrome扩展程序的图标时,请求会成功发送并创建一个新窗口。

然而,目标是确实在每个页面加载时发生。但在这种情况下,请求在页面加载时发送(这意味着文件执行)。但是,我想要创建的新窗口不会显示。

关于为什么会发生这种情况的任何想法都会非常有用。感谢

1 个答案:

答案 0 :(得分:0)

问题是内容脚本中未定义chrome.windows。如果您在控制台中查看,则在加载新选项卡时应该会看到错误。

它首次运行是因为您从有权访问myscript.js的浏览器操作弹出窗口运行chrome.windows

如果您只想在加载页面时执行此操作,则仅内容脚本就可以完成此任务。您不会需要start.htmlbrowser_action对象可以从manifest.json中移除。

此外,您需要修改内容脚本以使用window.open而不是chrome.windows

添加@abrahams评论:

如果弹出窗口拦截器未被用户操作触发,则

window.open可能会被阻止。解决方案可能是将消息发布到后台脚本并从那里使用chrome.windows。