2

この回答は、gmail.com https://stackoverflow.com/a/9439525/222236のすべての iframe のコンテンツにアクセスする方法を説明しています。

しかし、mail.google.com では次のエラーがスローされます。

Unsafe JavaScript attempt to access frame with URL https://plus.google.com/u/0/_/... from frame with URL https://mail.google.com/mail/u/0/#inbox. Domains, protocols and ports must match.

拡張機能のマニフェストの一致に追加しようとし*://plus.google.com/*ましたが、役に立ちませんでした。

更新: コンテンツにアクセスする前に URL を確認することはできますが、Google プラスのみを確認するため、現時点では私のロジックは非常に粗雑です:

        if(-1==iframes[i].src.indexOf('plus.google.com')) {
            contentDocument = iframes[i].contentDocument;
            if (contentDocument && !contentDocument.rweventsadded73212312) {
                // add poller to the new iframe
                checkForNewIframe(iframes[i].contentDocument);
            }
        }
4

2 に答える 2

2

同一オリジン ポリシーにより、アクセスがブロックされています。
エラーを回避する正しい方法は、別のオリジンからのフレームを除外することです。あなたの論理は確かに非常に粗雑です。特にホスト名を調べたり、他のドメインを考慮したりしません。
ロジックを反転して、堅牢なソリューションを作成します。

if (iframes[i].src.indexOf(location.protocol + '//' + location.host) == 0 ||
    iframes[i].src.indexOf('about:blank') == 0 || iframes[i].src == '') {

このホワイトリストの説明:

  • protocol://host/= https://mail.google.com.
    明らかに、現在のホストを許可する必要があります
  • about:blankおよび空の文字列
    これらのフレームは、GMail によって動的に作成およびスクリプト化されます。
于 2012-07-20T09:12:44.803 に答える
1

mail.google.complus.google.com同じドメインではありません。最新の Web ブラウザーの JavaScript 実装では、クロスドメイン スクリプティングが許可されていません。

さまざまな種類のハッカーに頼ることなく、これを回避する正しい方法は CORS ( http://en.wikipedia.org/wiki/Cross-origin_resource_sharing ) を使用することですが、この状況では利用できません。

于 2012-07-19T22:03:34.427 に答える