【问题标题】:Second `window.location = mailto:` fails as long as first one is still open只要第一个仍然打开,第二个`window.location = mailto:`就会失败
【发布时间】:2016-06-16 13:59:36
【问题描述】:

我正在尝试使用 javascript window.location.href=mailto:<addresses> 打开本地邮件窗口。但是,我的地址超过了最大长度。所以我把它切成小块,然后在特定的超时后一个接一个地发送。但是,如果第一个重定位仍然打开,则第二个重定位将不会打开新的(Outlook)邮件窗口......有没有办法解决这个问题?还是有另一种/更好的方法可以在本地客户端上打开多个邮件窗口?

任何帮助将不胜感激!

代码:

function Send_Mails(mails) {

var timeout = 2000;
var maxUrlCharacters = 1900;
var currIndex = 0;
var nextIndex = 0;

if (mails.length < maxUrlCharacters) {
    window.location = 'mailto:' + mails;
    return;
}

do {
    currIndex = nextIndex;
    nextIndex = mails.indexOf(';', currIndex + 1);
} while (nextIndex != -1 && nextIndex < maxUrlCharacters)

if (currIndex == -1) {
    window.location = 'mailto:' + mails;
} else {
    window.location = 'mailto:' + mails.slice(0, currIndex);
    setTimeout(function () {
                Send_Mails(mails.slice(currIndex + 1));
                }, timeout);
}

}

这会正确打开第一个邮件窗口,但只要第一个邮件窗口打开,第二个邮件窗口就永远不会打开。

最好的问候, 汉斯

【问题讨论】:

  • 请发布您的代码。
  • 您对您选择使用的解决方案的解释令人困惑。我们需要查看您的代码。
  • @EnigmaRM 代码添加有问题...

标签: javascript mailto window.location


【解决方案1】:

下面的示例脚本适用于localhost

<button onclick="openmail()">Open mail</button>
<script>
    function openmail(){
        window.location.href="mailto:test1@test.org"
        setTimeout(function(){
            console.log('2nd email');
            window.location.href="mailto:test2@test.org"
        }, 3000);
    }
</script>

Fiddle 上,它似乎有 75% 的时间都在工作(打开广告拦截器)。

弹出窗口和广告拦截器、防病毒软件等可能会静默阻止强制打开多个 mailto 链接。

【讨论】:

  • 感谢您提供有关弹出窗口阻止程序的提示,知道在哪里以及如何最好地检查这个吗?
  • 尝试移除弹出窗口拦截器并检查浏览器的弹出窗口设置。但要记住的重要一点是,您无法在客户端计算机上执行此操作。如果需要将其分发给客户端,您可能需要考虑不同的实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多