Javascript 新窗口是在单击时创建的,而不是在页面加载时创建的
我是chrome扩展开发的新手。试着把手放在我的第一只手上 我正在尝试编写一个扩展,在每次加载页面时执行特定的操作 每次加载页面时都需要发送post请求。我使用ajax请求来实现这一点。成功发送请求后,我想打开一个弹出/新建窗口 这是我的清单文件Javascript 新窗口是在单击时创建的,而不是在页面加载时创建的,javascript,jquery,google-chrome-extension,Javascript,Jquery,Google Chrome Extension,我是chrome扩展开发的新手。试着把手放在我的第一只手上 我正在尝试编写一个扩展,在每次加载页面时执行特定的操作 每次加载页面时都需要发送post请求。我使用ajax请求来实现这一点。成功发送请求后,我想打开一个弹出/新建窗口 这是我的清单文件 { "manifest_version": 2, "name": "Coupons", "version": "1.0", "description": "Yay! Coupons", "icons": { "1
{
"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扩展的图标时,请求被成功发送,并创建了一个新窗口
然而,其目的正是为了在每次页面加载时实现这一点。但在这种情况下,请求会在页面加载时发送(这意味着文件会执行)。但是,我要创建的新窗口没有显示
任何关于为什么会发生这种情况的想法都会非常有用。谢谢问题在于内容脚本中未定义
chrome.windows
。如果您在控制台中查看,您应该会在加载新选项卡时看到一个错误
它第一次起作用是因为您正在从浏览器操作弹出窗口运行myscript.js
,该弹出窗口可以访问chrome.windows
如果您只想在加载页面时执行此操作,则只需内容脚本即可完成此操作。您不需要start.html
,而且browser\u操作
对象可以从manifest.json
中删除
此外,您需要修改内容脚本以使用window.open
而不是chrome.windows
添加@abrahams评论:
window.open
如果不是由用户操作触发的,则可能会被弹出窗口阻止程序阻止。解决方案可能是将消息发布到后台脚本,然后从那里使用chrome.windows。是否有理由myscript.js
同时出现在start.html
和context\u脚本中?第一种情况是图标单击,第二种情况是单个选项卡。@peterdotjs是,我把它放在这两个文件中,只是为了分析为什么它在单击和单击时表现不同loading@peterdotjs另外,您能告诉我在我的内容脚本中,我应该在哪里添加window.open或chrome.windows我猜window.open如果不是由用户操作触发的,将被弹出窗口阻止程序阻止。解决方案可能是将消息发布到后台脚本中,然后在那里使用chrome.windows
。@abraham您能告诉我如何使用后台脚本来实现这一点吗?我对javascript和制作一个extension@shahharsh2603退房