0

だから、私は小さなGreasemonkey Userscriptを書いていて、Firefoxで正常に動作していますが、Google ChromeでTampermonkeyを使用して実行しようとすると、配列のエンコード/デコード時に奇妙なエラーが発生します。

スクリプトをクロスブラウザ互換にしようとしているので、使用するJSONメソッドを決定する関数を作成する必要がありました

function jsonEncode(string) { 
  try {
    return JSON.stringify(string); 
  } catch (e) {
    return JSON.encode(string); 
  }
}

function jsonDecode(obj) {
  try { 
    return JSON.parse(obj); 
  } catch (e) { 
    return JSON.decode(obj);
  }
}

物事を単純化するために、コードを単純な配列に減らし、エンコード/デコードと反復を試みました

var array = ['string1', 'string2'];

var encoded = jsonEncode(array);
localStorage.setItem('json_test', encoded);

var decoded = jsonDecode(localStorage.getItem('json_test'));
for(var i = 0; i < decoded.length; i++) {
    console.log(decoded[i]); 
}

出力は次のようになると思います

string1
string2

代わりにクロムは私にこれを与えます

[
"
s
t
r
i
n
g
1
"
,
"
s
t
r
i
n
g
2
"
]

誰かがこれを解決する方法、またはなぜクロムがそれをしているのか考えていますか?

編集1: Chromeバージョン15.0.874.121 m

編集2:まだ理解していませんが、配列の代わりにオブジェクトを使用して試してみると、機能するので、この方法で実行します。時間と助けに感謝します。

4

1 に答える 1

0

ChromeでJSコンソールを開きます(これにより、ループにブレークポイントを設定できます)、変数にウォッチを追加します。

そのほかに、jsonDecodeはデコードしません-まだ角かっこがあります...

問題は、文字列をそのままデコードすることです。つまり、コード化したのと同じように、文字列を文字にスライスするのです。

JSONは通常、配列を表します...正しい出力パラメーターについては、ドキュメントを確認してください。

于 2011-11-30T16:48:58.177 に答える