通过 mailto 发送正文中不可执行的脚本:
Send non executable script in body by mailto:
我想准备一封电子邮件,用 mailto 发送:
这封电子邮件包含几个词和一个 js 脚本。这个脚本不需要执行。仅供接收者复制粘贴。
剧本:
<script id="myID">var script = document.createElement("script");script.src="script-to-inject.js?id=myID&type=0&name=Name&size=120";document.head.appendChild(script); </script>
还有我的邮箱:
window.location.href = "mailto:"+email+"?subject="+subject+"&body=FewWords"+ script;
当我的邮件打开时,我有类似的东西:
<script id="myID">var script = document.createElement("script");script.src="script-to-inject.js?id=myID
没有出现脚本结尾(第一个&
之后)
我该如何解决这个问题?
谢谢!
您忘记对 URL 参数进行编码,因此 &
开始下一个参数。
您可以使用encodeURIComponent
函数:
window.location.href = "mailto:" + encodeURIComponent(email) +
"?subject=" + encodeURIComponent(subject) +
"&body=" + encodeURIComponent("FewWords" + script);
另一种更简洁的方法是使用 URLSearchParams
:
const url = new URL(`mailto:${encodeURIComponent(email)}`)
url.searchParams.set('subject', subject)
url.searchParams.set('body', 'FewWords' + script)
window.location.href = url
设置 href 属性时,您需要正确转义电子邮件、主题和脚本。如果这些变量包含 &
或 =
字符怎么办?您可以看到这会如何被误解。
试试这个:
window.location.href = "mailto:"
+ encodeURIComponent(email)
+ "?subject="
+ encodeURIComponent(subject)
+ "&body=FewWords"
+ encodeURIComponent(script);
(我不确定您是否可以在 body
参数中传递 HTML,顺便说一下,它可能会被解释为纯文本。)
您也可以使用 URLSearchParams
:
const params = new URLSearchParams();
params.append('subject', subject);
params.append('body', 'FewWords' + script);
window.location.href = 'mailto:' + encodeURIComponent(email) + '?' + params.toString();
我想准备一封电子邮件,用 mailto 发送: 这封电子邮件包含几个词和一个 js 脚本。这个脚本不需要执行。仅供接收者复制粘贴。
剧本:
<script id="myID">var script = document.createElement("script");script.src="script-to-inject.js?id=myID&type=0&name=Name&size=120";document.head.appendChild(script); </script>
还有我的邮箱:
window.location.href = "mailto:"+email+"?subject="+subject+"&body=FewWords"+ script;
当我的邮件打开时,我有类似的东西:
<script id="myID">var script = document.createElement("script");script.src="script-to-inject.js?id=myID
没有出现脚本结尾(第一个&
之后)
我该如何解决这个问题? 谢谢!
您忘记对 URL 参数进行编码,因此 &
开始下一个参数。
您可以使用encodeURIComponent
函数:
window.location.href = "mailto:" + encodeURIComponent(email) +
"?subject=" + encodeURIComponent(subject) +
"&body=" + encodeURIComponent("FewWords" + script);
另一种更简洁的方法是使用 URLSearchParams
:
const url = new URL(`mailto:${encodeURIComponent(email)}`)
url.searchParams.set('subject', subject)
url.searchParams.set('body', 'FewWords' + script)
window.location.href = url
设置 href 属性时,您需要正确转义电子邮件、主题和脚本。如果这些变量包含 &
或 =
字符怎么办?您可以看到这会如何被误解。
试试这个:
window.location.href = "mailto:"
+ encodeURIComponent(email)
+ "?subject="
+ encodeURIComponent(subject)
+ "&body=FewWords"
+ encodeURIComponent(script);
(我不确定您是否可以在 body
参数中传递 HTML,顺便说一下,它可能会被解释为纯文本。)
您也可以使用 URLSearchParams
:
const params = new URLSearchParams();
params.append('subject', subject);
params.append('body', 'FewWords' + script);
window.location.href = 'mailto:' + encodeURIComponent(email) + '?' + params.toString();