0

iframeとして読み込まれるウィジェットがあります。ホスティングページに関するいくつかのデータを知っている必要があります。ページから取得したUTF-8文字列がいくつかあります。通常、それらはロシア語のテキストのいくつかの行です。ページ自体は、適切なHTML5Doctypeとメタ文字セットの指定で問題ありません。

次に、私のコードは次のように機能します。

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

最後に、「http://mysite.com/iframe.html」URLがiframe内に読み込まれると、その中のスクリプトはハッシュから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をデコードしようとすると、が無効なエンコードであるというエラーが表示されます。

これをどのように修正すればよいですか?

4

1 に答える 1

0

答えは-IEが長すぎるURLを切り捨てており、2UTF-8バイトの間で発生します。

于 2013-02-04T17:37:13.533 に答える