如何使用书签将 link 通过电子邮件发送到当前页面而不覆盖选项卡的内容?
How to email a link to the current page using a bookmarklet without overwriting the content of the tab?
我正在尝试创建一个 Chrome JavaScript 小书签,它将打开我的电子邮件处理程序以撰写一封包含 body 的电子邮件,其中包含一个 link 到当前页面和主题是页面的标题。我发现 this guidance,它建议在小书签中使用以下代码:
javascript:document.location="mailto:?subject="+document.title+"&body="+escape(document.location);
这行得通,但有一个烦人的行为,即还会用文字 mailto
link 位置:
替换当前选项卡的内容
如何修改 JavaScript 以便小书签发送 link,但在浏览器中保留原始页面内容?
我试过了:
在JavaScript的末尾添加return false
。这阻止了任何事情的发生(甚至生成了电子邮件)。
分号后加location.reload()
如:
javascript:document.location="mailto:?subject="+document.title+"&body="+escape(document.location); location.reload();
重新加载了页面,但没有生成电子邮件。
分号前加location.reload()
如
javascript:document.location="mailto:?subject="+document.title+"&body="+escape(document.location) location.reload();
那什么也没做(没有重新加载页面或生成电子邮件)。
我不想为此使用扩展程序,因为:
我发现在需要/不需要时显示/隐藏书签比处理显示/隐藏扩展图标更容易。
我不想处理扩展的激活、允许隐身和浏览器版本兼容性问题。
你可以使用window.open()
不覆盖当前页面位置的明显解决方案是使用 window.open()
.
javascript:void(window.open("mailto:?subject=" + encodeURIComponent(document.title) + "&body=" + encodeURIComponent(document.location)));
但是,这会创建一个需要关闭的空白选项卡,并且经常会遇到弹出窗口阻止的问题。在某些情况下,可以通过编程方式关闭此选项卡,但这取决于您的浏览器、某些浏览器设置、弹出窗口阻止程序扩展等。
清洁剂:使用 <iframe>
对于此用途,使用 <iframe>
同样有效,而且不易出现问题。以下小书签使用 insertAdjacentHTML()
在 document.body
的末尾添加了一个 <iframe>
。将 <iframe>
添加到文档将导致 mailto
URL 被您的浏览器评估。然后浏览器会告诉您的电子邮件程序打开一个发送电子邮件 window 供您发送电子邮件。
javascript:(function(){var now=Date.now(); document.body.insertAdjacentHTML('beforeend', '<iframe id="iframe-to-delete-' + now + '" src="mailto:?subject=' + encodeURIComponent(document.title.trim()) + '&body=' + encodeURIComponent(document.location) + '" style="display: none !important"></iframe>'); setTimeout(() => document.getElementById('iframe-to-delete-'+now).remove(), 3000);})()
一旦您的电子邮件程序打开发送电子邮件对话框,小书签就可以删除 <iframe>
,这样页面就不会受到干扰。
我正在尝试创建一个 Chrome JavaScript 小书签,它将打开我的电子邮件处理程序以撰写一封包含 body 的电子邮件,其中包含一个 link 到当前页面和主题是页面的标题。我发现 this guidance,它建议在小书签中使用以下代码:
javascript:document.location="mailto:?subject="+document.title+"&body="+escape(document.location);
这行得通,但有一个烦人的行为,即还会用文字 mailto
link 位置:
如何修改 JavaScript 以便小书签发送 link,但在浏览器中保留原始页面内容?
我试过了:
在JavaScript的末尾添加
return false
。这阻止了任何事情的发生(甚至生成了电子邮件)。分号后加
location.reload()
如:javascript:document.location="mailto:?subject="+document.title+"&body="+escape(document.location); location.reload();
重新加载了页面,但没有生成电子邮件。
分号前加
location.reload()
如javascript:document.location="mailto:?subject="+document.title+"&body="+escape(document.location) location.reload();
那什么也没做(没有重新加载页面或生成电子邮件)。
我不想为此使用扩展程序,因为:
我发现在需要/不需要时显示/隐藏书签比处理显示/隐藏扩展图标更容易。
我不想处理扩展的激活、允许隐身和浏览器版本兼容性问题。
你可以使用window.open()
不覆盖当前页面位置的明显解决方案是使用 window.open()
.
javascript:void(window.open("mailto:?subject=" + encodeURIComponent(document.title) + "&body=" + encodeURIComponent(document.location)));
但是,这会创建一个需要关闭的空白选项卡,并且经常会遇到弹出窗口阻止的问题。在某些情况下,可以通过编程方式关闭此选项卡,但这取决于您的浏览器、某些浏览器设置、弹出窗口阻止程序扩展等。
清洁剂:使用 <iframe>
对于此用途,使用 <iframe>
同样有效,而且不易出现问题。以下小书签使用 insertAdjacentHTML()
在 document.body
的末尾添加了一个 <iframe>
。将 <iframe>
添加到文档将导致 mailto
URL 被您的浏览器评估。然后浏览器会告诉您的电子邮件程序打开一个发送电子邮件 window 供您发送电子邮件。
javascript:(function(){var now=Date.now(); document.body.insertAdjacentHTML('beforeend', '<iframe id="iframe-to-delete-' + now + '" src="mailto:?subject=' + encodeURIComponent(document.title.trim()) + '&body=' + encodeURIComponent(document.location) + '" style="display: none !important"></iframe>'); setTimeout(() => document.getElementById('iframe-to-delete-'+now).remove(), 3000);})()
一旦您的电子邮件程序打开发送电子邮件对话框,小书签就可以删除 <iframe>
,这样页面就不会受到干扰。