Firefox の同一生成元ポリシーの実装に関して、ますますイライラする問題を抱えています。
私はタッチスクリーンをサポートする統合システムを開発しており、画面上のいくつかの場所にiframeでWebページを読み込むオプションがあります。Webページはどれでもあらゆる種類のドメインと場所 (Google、Yahoo、イントラネット ページなど) からのあらゆる種類の Web ページですが、ここに私の問題があります。
iframe に onclick イベントを追加して、応答として iframe の ID (または他の一意の識別子) を取得できるようにする必要があります。これにより、iframe でアクティビティ (Web ブラウジング) が進行中であり、iframe を再読み込みしてはならないことがわかります (ページは固定の自動更新間隔に設定されており、アクティビティ時に中断される必要があります)。
私は Google が返すほぼすべての情報を読みました (ただし、この件については反証されたいです)。そして、これが (他の多くの解決策の中でも) 最善の解決策であることがわかりました。
<iframe src='http://google.com' id='iframe1' onload='netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite"); this.contentWindow.document.addEventListener("click", function(event) {alert(this.id);}, false)'></iframe>
これは私に通常の許可が拒否されましたhttp://ローカルホストWindow.documentプロパティを取得するhttp://google.com
知っているなぜこのエラー メッセージが表示されましたが、私の質問は単純です。どうすれば削除できますか?
これは統合システムであり、Firefox をソースからコンパイルし、必要に応じてソース コードを編集し、prefs.js などを変更することができます。ただし、Firefox を使用する必要があります (他のすべての適切な Web ブラウザーには、Firefox をオフにするための優れたコマンド ライン スイッチがあることは知っています...)。ただし、Firefox プラットフォームとの (かなり) 緊密な統合があり、削除するのは困難です。
現在、Debian Squeeze プラットフォームで Firefox v.3.5.16 (EOL であることは承知していますが、別の機会にアップグレードする予定です) を使用しています。必要に応じて、新しいバージョンの Firefox にアップグレードすることもできますが、私の知る限りでは、この問題に関してはさらに悪い状況のようです。
要約 同じ起源のポリシーを閉じるのを手伝ってくださいあらゆる方法でクロスドメイン iframe を通じてコードを変更する必要がある統合プラットフォームの場合は、Firefox 3.5.16 を使用します。
答え1
かなりバカな気がします。
使用すると機能しますユニバーサルXPコネクトUniversalBrowserWrite の代わりに。
たとえば、netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
また、ないthis.id または this.parentNode.id を使用すると、依然として (別の) アクセス エラーが発生します。この問題を解決するには、まずそれを一時変数に保存します。
onload='var tempstuff = this.id; this.contentWindow.document.addEventListener("click", function(event) {alert(tempstuff);}, false)'