我正在使用jquery将my blog的<pre>
个$(function() {
$.each($('pre'), function(i, e) {
if (e.lang != '') {
$.ajax({
url: 'pastebin.ashx',
context: $(this),
data: {
data: $(this).text(),
lang: e.lang
},
success: function(t) {
if (t.indexOf('*error*') != 0) {
var h = Math.floor($(this).height() * 1.62) + "px";
$(this).replaceWith("<iframe src='http://pastebin.com/embed_iframe.php?i=" + t + "' style='border:none;width:100%;height:" + h + "'></iframe>")
}
}
});
}
});
});
标签中的代码发送给处理程序,该处理程序将使用包含格式化代码的正确pastebin.com框架替换它们。
我正在使用MD5哈希将代码块映射到pastebin对应的转换,以便每个代码段只有一个粘贴框。
问题是发布的字符串似乎在IE和Firefox之间有点变化,所以我没有完全的MD5编码。出于某种原因,问题仅出现在生产服务器上。
jquery代码是这样的:
{{1}}
是否有某些原因可以从不同的浏览器更改发布的数据? 的修改
所有IE都不会出现这个问题,同一版本9.0.8112.16421可以在一台机器上运行,而不是在另一台机器上运行!我想差异必须在$(this).text()中。失败的版本似乎包含没有回车的文本。
答案 0 :(得分:2)
如果问题出在回车上,为什么不简单地将它们从文本中删除()? (可能有一个更好更安全的方法来删除alla回车,例如,看here,我只想把我想到的最简单的代码。)
if (e.lang != '') {
var data = $(this).text();
data.replace(new RegExp( "\\r", "g" ), '');
$.ajax({
url: 'pastebin.ashx',
context: $(this),
data: {
data: data,
lang: e.lang
},
success: function(t) {
if (t.indexOf('*error*') != 0) {
var h = Math.floor($(this).height() * 1.62) + "px";
$(this).replaceWith("<iframe src='http://pastebin.com/embed_iframe.php?i=" + t + "' style='border:none;width:100%;height:" + h + "'></iframe>")
}
}
});
}
这样你应该有相同的md5
答案 1 :(得分:1)
这个应该只是一个评论,但似乎我没有足够的声誉(实际上我根本没有声誉)这样做:)
只是一个建议:我记得前一段时间与IE有过类似的问题,有可能它不是jQuery问题,所以尝试使用getElementById
和innerText
来查看问题是否仍然存在,这将有助于您限制该领域。如果是这种情况,请尝试剥离CR和LF,在您的情况下,无论如何我都应该这样做。
答案 2 :(得分:0)
好的,找到了解决方案:使用html()
而不是text()
解决了问题:使用html()的唯一缺点是pre内容是htmlEncoded,所以我不得不修改处理程序,但我们获得的结果似乎在浏览器中保持稳定。