admin管理员组文章数量:1326285
I have a web page that creates a list of contacts and their email addresses. You have two options for the mailto link, (1) open it in the current window or (2) open it in a new tab/window.
I see potential drawbacks from both sides:
- For web mail clients (e.g. gmail) option 1 is not ideal because it hijacks the window then, and the user must navigate back to the application in some fashion
- For desktop mail clients, the first option is not ideal because now you have a blank window/tab left open
Is there anyway to "detect" if the opened webpage has content and close it if not?
Based on this link:
Detecting web-based mail client vs local mail client for a mailto link
I tried the following to get the body
:
const windowRef = window.open(`mailto:${email}`, '_blank')
const body = windowRef.document.body
The problem I was running into was that the body
of each document was empty: <body></body>
I assume this was because it didn't have enough time to load the page, so I attempted to setTimeout
but then I got a Blocked a frame with origin "myhostman" from accessing a cross-origin frame.
Any ideas on a way to support both web and desktop mail clients without the drawbacks listed above?
I have a web page that creates a list of contacts and their email addresses. You have two options for the mailto link, (1) open it in the current window or (2) open it in a new tab/window.
I see potential drawbacks from both sides:
- For web mail clients (e.g. gmail) option 1 is not ideal because it hijacks the window then, and the user must navigate back to the application in some fashion
- For desktop mail clients, the first option is not ideal because now you have a blank window/tab left open
Is there anyway to "detect" if the opened webpage has content and close it if not?
Based on this link:
Detecting web-based mail client vs local mail client for a mailto link
I tried the following to get the body
:
const windowRef = window.open(`mailto:${email}`, '_blank')
const body = windowRef.document.body
The problem I was running into was that the body
of each document was empty: <body></body>
I assume this was because it didn't have enough time to load the page, so I attempted to setTimeout
but then I got a Blocked a frame with origin "myhostman" from accessing a cross-origin frame.
Any ideas on a way to support both web and desktop mail clients without the drawbacks listed above?
Share Improve this question asked Jul 27, 2017 at 19:36 Tom NolanTom Nolan 1,9574 gold badges32 silver badges54 bronze badges1 Answer
Reset to default 9This is pretty kludgy, but it might do what you need:
You can have a SendEmail()
function defined like this:
function SendEmail() {
const windowRef = window.open(`mailto:[email protected]`, '_blank');
windowRef.focus();
windowRef.onfocus = function() {
return;
}
setTimeout(function(){
windowRef.close();
},500);
}
and your html
looks something like this:
<a href="javascript:void(0)" onclick="SendEmail();">email</a>
The idea behind this is that, if your user has a webmail as their default email client, then the function
will just exit; however, if the user has a desktop email client, the new window will lose focus triggering the setTimeout()
closing the new opened window.
My test works well using this JSFiddle but is "half" tested, I mean, since I don't have a webmail client set as my default client, I can't confirm this will actually work as you want, however I can confirm that the window closed when my desktop email client opened...
UPDATE:
Forget the function above, I slightly modified it to this:
function SendEmail() {
const windowRef = window.open(`mailto:[email protected]`, '_blank');
windowRef.focus();
setTimeout(function(){
if(!windowRef.document.hasFocus()) {
windowRef.close();
}
}, 500);
}
I tested this in Firefox by setting Gmail and Yahoo! as my default email clients, and the new opened tab remained opened; then I changed it back to my desktop email client, and the new opened tab closed. I did the same test using Vivaldi, and IE Edge (where my desktop client is set as the default one), and the results were successfully the same. Here's the updated JSFiddle.
本文标签: javascriptMailto link open in new tab only if web mail clientStack Overflow
版权声明:本文标题:javascript - Mailto link open in new tab only if web mail client - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742209681a2433477.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论