我有一个以iframe加载的小部件。它必须知道有关托管页面的一些数据。 我从页面获得了几个UTF-8字符串。通常他们是俄罗斯文本的一些行。使用正确的HTML5 doctype和meta charset规范,页面本身就可以。
然后我的代码就是这样:
params = "x1=" + encodeURIComponent(s1) + "&x2=" + encodeURIComponent(s2)
url = "http://mysite.com/iframe.html#" + params
create_iframe(url)
其中create_iframe有点
var $if, doc;
$if = $('<iframe>').attr({
frameborder: 0,
scrolling: "no",
allowtransparency: "true"
}).css(css).appendTo($cont);
doc = $if[0].contentWindow.document;
doc.open().write("<head><meta charset=\"UTF-8\"><script>" +
"var s = \"" + url + "\";" + // <--- here the url is injected into the iframe content
"function init() { document.location.href = s; }" +
"</script></head><body onload=\"init();\">...</body>");
doc.close();
在这里,我们使用jQuery创建一个iframe,然后写入其内容,使其加载我们的url
。
最后,当在iframe中加载“http://mysite.com/iframe.html”URL时,其中的脚本会从散列中获取params的值:
var hash_index, loc, param, params, params_array, params_string, tmp, _i, _len;
loc = document.location.href;
hash_index = loc.indexOf('#');
if (hash_index >= 0) {
params_string = loc.substring(hash_index + 1);
}
params_array = params_string ? params_string.split('&') : [];
params = {};
for (_i = 0, _len = params_array.length; _i < _len; _i++) {
param = params_array[_i];
tmp = param.split('=');
params[tmp[0]] = decodeURIComponent(tmp[1]);
}
return params;
整个过程在Chrome中运行正常。
在IE8中,我在尝试解码URI时收到错误说错误的编码
我该如何解决这个问题?
答案 0 :(得分:0)
答案是 - IE正在截断太长的URL,它发生在2个UTF-8字节之间。