0

内部的に、Firefox は、postMessage を介して Web ワーカーとの間で渡されるオブジェクトを JSON エンコードします。ただし、これは Firefox (3.6+) の Trunk ビルドでのみ機能し、Firefox 3.5 では機能しないため、問題は、この操作の後方サポートを現在のプラットフォームに追加する方法です。window.atob() および window.btoa() メソッドは以前に提案されていましたが、残念ながらこれらは DOM にアクセスできないため、スレッドの内部では使用できません。

Mozilla は開発者 wiki でこれを公に述べていますが、コミュニティの多くの人がこれが起こることに気づいています。ejohn のブログ テストを確認してください: http://ejohn.org/files/bugs/postMessage/

これも同様であることを確認しました。3.5 では文字列のみを渡し、3.6 ではオブジェクトを渡します。

4

4 に答える 4

2

自動 JSON エンコーディングが Firefox 3.5 で機能していないことに気付いていませんが、主に Gears で作業しており、Gears はとにかくそれをサポートしていません。

ワーカー スクリプトと親スクリプトの両方にJSON ユーティリティを含めてみてから、自分で手動でエンコードおよびデコードしてください。これは、Gears で私にとってはかなりうまく機能します。

エンコードされた JSON 文字列は文字列のままであるため、Firefox が自動的に JSON エンコードを開始しても、このアプローチは壊れません。

于 2009-09-09T21:48:16.243 に答える
1

JavaScript には、base64 文字列をデコードおよびエンコードするための 2 つの関数があります。

atob() btoa()

于 2016-03-28T18:09:44.790 に答える
0

私は自分の問題の解決策を見つけました!

スレッド変数がグローバルに宣言されていても、.onmessage プロパティが別の関数内で宣言されている場合、そのプロパティが失われるようです。プロパティがグローバル スコープでインスタンス化されている場合、JSON メッセージは正しく解析されます。

ここで何が起こっているのかまだよくわかりませんが、少なくとも、追加の stingify/json ライブラリに依存せずにオブジェクトを渡す方法を見つけました。

誰かが私にこれを説明して、理解を深めることができれば幸いです:)

ここでテスト ケースをセットアップします: http://x.miernicki.com/誰かが気にする場合、スレッド間メッセージを firebug コンソールに記録します。これは、Fox3.5 でオブジェクトを渡すのに役立ち、最終的に問題が何であるかを確認することができました。

于 2009-09-10T16:39:00.997 に答える
0

明らかに FF のみのソリューションを探しているので、試してみましたyourObject.toSource()か?

于 2009-09-09T22:08:25.483 に答える