Tra*_*Guy 8 javascript google-chrome google-chrome-extension
我有一个名为Shrtr的网址缩短Chrome扩展程序.现在,它允许用户将缩短的URL复制到剪贴板,但在下一个版本中,我添加了使用mailto:链接(即mailto:?subject=<original page title>&body=<short URL>)通过电子邮件发送缩短的URL的功能.
问题是,你不能只是document.location.href = 'mailto...';从扩展分配.以下两种方法对我有用,但两者都有,我最终在浏览器中打开了一个空白选项卡:
方法1: window.open
var wnd = window.open(emailUrl);
setTimeOut(function() {
wnd.close();
}, 500);
Run Code Online (Sandbox Code Playgroud)
注意在关闭窗口之前需要等待.这有效(即预先填充邮件客户端新消息对话框),但新选项卡仍保持打开状态.
方法2:使用 chrome.tabs
chrome.tabs.create({ url: emailUrl }, function(tab) {
setTimeOut(function() {
chrome.tabs.remove(tab.id);
}, 500);
});
Run Code Online (Sandbox Code Playgroud)
同样,工作 - 但标签保持打开状态.有任何想法吗?
我意识到这是一个老问题,但我自己也有同样的问题,我想出了如何解决问题,所以我想我会分享.
问题源于(我相信)您从扩展程序弹出页面调用以下代码.
chrome.tabs.create({ url: emailUrl }, function(tab) {
setTimeout(function() {
chrome.tabs.remove(tab.id);
}, 500);
});
Run Code Online (Sandbox Code Playgroud)
这样做的问题是,只要创建一个新选项卡,弹出页面就会死掉,并且永远不会执行回调代码.
我们可以通过将代码移动到后台页面中的函数来解决这个问题,后台页面的生命周期与弹出页面无关:
function sendEmail() {
var emailUrl = "mailto:blah@blah.com";
chrome.tabs.create({ url: emailUrl }, function(tab) {
setTimeout(function() {
chrome.tabs.remove(tab.id);
}, 500);
});
}
Run Code Online (Sandbox Code Playgroud)
并chrome.extension.getBackgroundPage().sendEmail()从弹出页面调用它.
使用上述方法,将打开默认电子邮件客户端,新选项卡将在500毫秒后自动关闭.
var emailUrl = "mailto:blah@blah.com";
chrome.tabs.update({
url: emailUrl
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3990 次 |
| 最近记录: |