我目前的问题是我在页面上有一个电子邮件超链接,打开一个新的电子邮件弹出屏幕。每次单击电子邮件链接时,弹出的电子邮件中的“收件人:”字段将由附加到超链接的电子邮件地址填充。如果该电子邮件中包含撇号,则第一次单击它时它将正常工作,但每次发送后都会更改撇号为'%27' (如下图所示)。
我的脚本中的想法是将页面中的所有链接放入一个数组中,在该数组中搜索一个类为" EMAILLINK"并使用我自己的函数替换该链接上的onclick事件,这将删除'%27'在链接中放入撇号。
<script>
// When the page loads
$(document).ready(function () {
// Load all of the link elements into an array
var allLinks = document.getElementsByTagName('a');
// Iterate through all of the links on the page
for (var i=0; i<allLinks.length; i++) {
// When you find one with a class of "EMAILLINK" (an email link)
if (allLinks[i].className=="EMAILLINK") {
// Load the text of the onclick event into a car
var strOldOnclick = allLinks[i].onclick + '';
// Create a regex that matches a single quote, along with part of the function
// used to launch the email pop-up
var testRegex = /(MailTo\(\'.*\%27.*\',event,.*\))/gi;
// Check if the link contains an encoded single quote
if (testRegex.test(strOldOnclick)) {
// Execute the regex against the onclick event
// (loads part of it into variable 1 (RegExp.$1))
testRegex.exec(strOldOnclick);
// Replace the correct onclick text in your string var
var newFunc = "alert('NewFunc running'); if(parent&&parent.frames['EWARE_MENU'])fn=parent;"
+ "else fn=opener.parent;"
+ "if(fn&&fn.frames['EWARE_MENU'])"
+ "fn.frames['EWARE_MENU']."
+ RegExp.$1.replace('%27', "\\'") +";"
// Replace the onclick event for the link with the updated value
$("Before test: " + [allLinks[i]]).attr('onclick','').unbind('click');
$([allLinks[i]]).bind("click", Function(newFunc));
}
}
}
});
</script>
当我查看页面来源时,这是链接上的原始onclick事件:
if(parent&&parent.frames['EWARE_MENU'])fn=parent;else fn=opener.parent;if(fn&&fn.frames['EWARE_MENU'])fn.frames['EWARE_MENU'].MailTo('R%27Sakai@demo.com',event,'&Key0=3&Key1=116&Key2=169');
注意:我知道onclick正在变得正确,因为当我点击链接时警报就会出现,所以这与我改变Javascript的方式有关(var newfunc)
这种方法的一种变体适用于Internet Explorer,但不适用于Chrome(或Firefox),也就是使用它。
答案 0 :(得分:0)
您不需要编写自己的函数,只需使用JavaScript unescape()函数删除撇号。如果MailTo包含带撇号的字符串:
var readableString = unescape(MailTo);