1. ホーム
  2. javascript

[解決済み] Uncaught DOMException。ページ内の iframe を一覧表示する際に、オリジン "http://localhost:8080" のフレームがクロスオリジンフレームにアクセスするのをブロックした

2022-02-19 04:35:39

質問

の名前をすべてリストアップしようとしています。 iframe にアクセスできるようにします。

問題なのは iframe は毎回変わるので、全部をループする必要があります。

得ています。

Uncaught DOMException: オリジン " でフレームがブロックされました。 http://localhost:8080 クロスオリジンフレームにアクセスすることができません。

を使ってループさせようとすると、エラーが発生します。

for (var f = 0; f < window.frames.length; f++) {
    console.log(window.frames[f].name)
}

の名前を取得する方法はありますか? iframe を別の方法で表示できますか?

どのように解決するのですか?

このエラーメッセージは...

Uncaught DOMException: Blocked a frame with origin "http://localhost:8080" from accessing a cross-origin frame.

...を意味する。 WebDriver インスタンス ブロック化 がクロスオリジンフレームにアクセスしている。


セイムオリジンポリシー

同一原産地ポリシー : 同一生成元ポリシーは、ある生成元から読み込まれたドキュメントやスクリプトが、別の生成元からのリソースとどのように相互作用するかを制限します。これは 重要なセキュリティ機構 潜在的に悪意のある文書を隔離するためのものです。


クロスオリジンリソース共有(CORS)

クロスオリジンリソース共有(CORS) : Cross-Origin Resource Sharing (CORS)は、CORSを利用することで、CORSを利用するための追加的な HTTPヘッダ を伝えるために ブラウザクライアント にさせることができます。 AUT (Application under Test) は、あるオリジン(ドメイン)で実行されているサーバーから選択されたリソースにアクセスする権限を持つ。ウェブアプリケーションは クロスオリジンHTTPリクエスト 異なるオリジンを持つリソースを要求するとき ( domain , protocol および port )自身の原点より


原点の例

以下は、URLに対するオリジン比較の例です。 http://store.company.com/dir/page.html

URL                                                  Outcome    Reason
http://store.company.com/dir2/other.html             Success
http://store.company.com/dir/inner/another.html      Success
https://store.company.com/secure.html                Failure    Different protocol
http://store.company.com:81/dir/etc.html             Failure    Different port
http://news.company.com/dir/other.html               Failure    Different host


何が問題だったのか

ループスルーしようとしたとき frames スクリプトやプログラムが <iframe> を、JavaScript を使用して異なるオリジンで使用することは、巨大な セキュリティ上の欠陥 を実現したのであれば 上記のように セイムオリジンポリシー にアクセスしようとするスクリプトをブラウザがブロックします。 <iframe> を、異なるオリジンで使用することができます。

2つのページが同じオリジンであるのは プロトコル , ポート (指定されている場合)、および ホスト は、両方のウェブページで同じです。このことを "scheme/host/port tuple" タプルとは、全体を構成する3つの構成要素の集合のことです)。おそらく プロトコル , ドメイン , ホスト名 ポート は、目的のフレームにアクセスする際に、同じドメインの同じものである必要があります。

解決方法

その AUT には、多数の フレーム / iframes の後にのみ読み込まれるものもあります。 JavaScript / Ajax が完了しているものもありますが、中には スタイル 属性は display:noneを指定します。 または 可視性 として 隠された . もちろん、それらすべてと対話する必要はないでしょう。そこで、よりよい方法として 属性 <iframe> を表示し、それに応じて切り替わります。に切り替えることができます。 <iframe> を介する。

  • Frame Name
  • Frame ID
  • Frame Index
  • WebElement

による ベストプラクティス フレームに切り替えたい場合は WebDriverWait について フレームToBeAvailableAndSwitchToIt を、以下の参考文献のとおりとします。

に関連する議論はこちらです。 非捕捉DOMException


参考文献

参考文献の一部をご紹介します。