ROT-13 Internet Explorer中的链接解码失败
ROT-13 Link Decoding Failing in Internet Explorer
我将网站上的所有电子邮件地址编码为ROT-13,然后使用Javascript解码地址(以避免垃圾邮件)。然而,在IE 7或8中,完全解码是不起作用的。适用于Chrome、Safari和Firefox。有什么问题吗?
更新链接"href"被正确解码,单击后链接实际上工作正常。因此,只有链接文本(HTML内容)无法解码。
这是我正在使用的代码:
/***********************************************
DECODE ROT13 EMAIL LINKS
***********************************************/
$('a.email-encoded').each(function() {
$(this).attr('href', rot13x($(this).attr('href')));
$(this).html(rot13x($(this).html()));
});
function rot13x(s) {
var rxi = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var rxo = 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm5678901234';
var map = [];
var buf = '';
for (z = 0; z < rxi.length; z++) {map[rxi.substr(z, 1)] = rxo.substr(z, 1);}
for (z = 0; z < s.length; z++) {
var c = s.charAt(z);
buf += (c in map ? map[c] : c);
}
return buf;
}
每当我看到for
循环从零开始并使用<=
作为其停止条件时,我都会担心:
for (z = 0; z <= s.length; z++) {
当最后定义的元素通常是s[length-1]
时,这个习惯用法可以很容易地取消引用s[0]
和s[length]
。
IE的JavaScript引擎如何处理字符串上的越界读取和写入?
发现问题与ROT-13解码无关。
Internet Explorer中存在一个与电子邮件链接的"href"属性有关的"错误"。如果使用javascript更新"href",IE会自动更新链接的文本以匹配"href"。
因此,在我的代码中,首先对"href"进行了正确解码,然后IE将链接文本设置为与新解码的"href"匹配。然后,我们解码了已经解码的链接文本,无意中再次对其进行了编码。
解决方案是先将解码后的链接文本存储为var,然后在"href"完成解码后将其用于链接文本。像这样:
$('a.email-encoded').each(function() {
var oldHref = $(this).attr('href');
var newHref = rot13x(oldHref);
var newLink = rot13x($(this).html());
$(this).attr('href', newHref);
$(this).html(newLink);
});
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 如何使用jQuery自动打开页面上的所有链接
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- jquery动画可以通过编程链接吗
- 在单击href链接的同时下载文件
- 尽管链接成功并已成功下载,但未找到NPM模块
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 单击页面上的链接后高度发生变化
- 将纯文本URL转换为可单击链接
- python-selenium-点击上升链接
- 一点javascript元编程&可链接的设置器
- ng视图外的链接重定向到ng视图内的页面
- 如何调用“;链接_;在onclick事件上使用Javascript
- 链接所有<a>Meteor
- 如何在Angular中的表的所有单元格中添加链接
- 解码 URI 问题 - 超链接变为纯文本
- 如何从字符串解码链接
- 如何解码facebook链接
- ROT-13 Internet Explorer中的链接解码失败