我有一个名为Shrtr的网址缩短Chrome扩展程序。现在,它允许用户将缩短的URL复制到剪贴板,但在下一个版本中,我添加了使用mailto:
链接(即mailto:?subject=<original page title>&body=<short URL>
)通过电子邮件发送缩短的URL的功能。 / p>
问题是,您不能只从扩展程序中分配document.location.href = 'mailto...';
。以下两种方法对我有用,但两者都有,我最终在浏览器中打开了一个空白选项卡:
方法1:window.open
var wnd = window.open(emailUrl);
setTimeOut(function() {
wnd.close();
}, 500);
请注意在关闭窗口之前需要等待。这有效(即邮件客户端新消息对话框出现,预先填充),但新选项卡仍保持打开状态。
方法2:使用chrome.tabs
chrome.tabs.create({ url: emailUrl }, function(tab) {
setTimeOut(function() {
chrome.tabs.remove(tab.id);
}, 500);
});
再次,工作 - 但标签保持打开状态。有什么想法吗?
答案 0 :(得分:6)
我意识到这是一个老问题,但我自己也有同样的问题,我想出了如何解决这个问题所以我想我会分享。
问题源于(我相信)您从扩展程序弹出页面调用以下代码。
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毫秒后自动关闭。
答案 1 :(得分:5)
var emailUrl = "mailto:blah@blah.com";
chrome.tabs.update({
url: emailUrl
});
答案 2 :(得分:0)
你不需要像这样的密切陈述
<a href="javascript:window.open('','_self').close();">close</a>
学分归丹尼尔How to close current tab in a browser window?
甚至是这样的
//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 Code to close tab that works in IE, Firefox and Chrome?
答案 3 :(得分:0)
我已经解决了这个问题。请检查它是否适合您的解决方案空间。
我使用以下代码在chrome扩展程序中打开mailto客户端。
$('.email').click(function(){
var hrefString = $(this).attr('href');
var myWindow = window.open(hrefString, "Opening mail client", "width=200, height=100");
myWindow.document.write("<p>Opening mail client.Please wait!!</p>");
setTimeout(function(){ myWindow.close() }, 2000);
});
元素是:
<a style="padding: 0 0 0 5px;" href="mailto:abc@xyz.com" class="email">
这对我有用。
希望它能帮助别人。
的问候,
Karan Ratra