我有一个网址缩短Chrome扩展名为史泰尔。现在,它允许用户将缩短的URL复制到剪贴板上,但是在下一个版本中,我增加了使用mailto:链接(即mailto:?subject=<original page title>&body=<short URL>)发送缩短URL的能力。
问题是,您不能只从扩展分配document.location.href = 'mailto...';。以下2种方法对我有效,但在这两种方法中,我最终在浏览器中得到一个开放的空白选项卡:
window.open 方法1:
var wnd = window.open(emailUrl);
setTimeOut(function() {
wnd.close();
}, 500);注意在关闭窗口之前需要等待。这是可行的(即出现邮件客户端新消息对话框,预先填充),但新选项卡仍处于打开状态。
方法2:使用
chrome.tabs.create({ url: emailUrl }, function(tab) {
setTimeOut(function() {
chrome.tabs.remove(tab.id);
}, 500);
});再次,工作-但选项卡仍然打开。有什么想法吗?
发布于 2015-12-18 20:01:53
我意识到这是一个老问题,但我自己也有同样的问题,我想如何解决这个问题,所以我想我会分享。
这个问题源于这样一个事实:(我相信)您正在从扩展弹出页面调用以下代码。
chrome.tabs.create({ url: emailUrl }, function(tab) {
setTimeout(function() {
chrome.tabs.remove(tab.id);
}, 500);
});问题在于,一旦创建了一个新的选项卡,弹出页面就会消失,回调代码永远不会执行。
我们可以通过将该代码移动到后台页面中的函数(其生存期不与弹出页绑定)来纠正这一问题:
function sendEmail() {
var emailUrl = "mailto:blah@blah.com";
chrome.tabs.create({ url: emailUrl }, function(tab) {
setTimeout(function() {
chrome.tabs.remove(tab.id);
}, 500);
});
}并通过chrome.extension.getBackgroundPage().sendEmail()从弹出页面调用它。
使用上述方法,将打开默认的电子邮件客户端,新选项卡将在500毫秒后自动关闭。
发布于 2016-12-18 05:23:42
var emailUrl = "mailto:blah@blah.com";
chrome.tabs.update({
url: emailUrl
});发布于 2014-02-15 05:01:09
你不需要这样一份严密的声明吗
<a href="javascript:window.open('','_self').close();">close</a>学分归丹尼尔如何关闭浏览器窗口中的当前选项卡?
甚至像这样的东西
//keep a handle to the window you open.
var newWin = window.open('my window', 'http://.../');
...
//some point later in the code
newWin.close();学分归Tracker1 Javascript代码关闭在IE,Firefox和Chrome中工作的选项卡?
https://stackoverflow.com/questions/21792565
复制相似问题