-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Work with X-Frame-Options:deny on Chrome #3
base: master
Are you sure you want to change the base?
Conversation
パッチありがとうございます。このパッチでこのエラーは解消されるので適用したいんですが、別の事情があるので保留させてください。 別の事情というのは、AutoPagerizeの要件としてクロスオリジンからデータを取得した合に処理を止める必要があるんですが、XHRだとリダイレクトを経由したときにそれを判別できないという問題があります。 |
なるほど。そういう要件があったのですね。 |
あれ? manifest.json の permissions に http://wedata.net/* しか書かれてないので、実質クロスドメインは出来ないんじゃないですか? |
req.responseType = 'document' を使うことによって、document オブジェクトを取得すると同時に、最終のドキュメントのURLがとれるのでそれでドメインのチェックが出来るようになったと思います。 |
あああ、すみません。余計なコメントをあっちでしてしまいました。。 |
@YungSang |
ありがとうございます。はい、私もそれを読んで、req.responseType = 'document' を試してみたところ良い感じだったので、再PRしてみました。 |
アクセス先がAccess-Control-Allow-Originヘッダーでクロスオリジンのアクセスを許可している場合は、permissionと関係なくアクセスできるので、そういうケースを想定しています。 将来的に解決する可能性と書いたのは、documentTypeでdocumentを指定してresponse.URLを見る方法なんですが、実装に不備があるので採用していませんでした。 現状のChromeは、クロスオリジンへのリダイレクトはエラーになります。エラーになるのは都合が良いのですが、エラーになる理由がわかりません。CORSの仕様にリダイレクトでエラーにするということはなく、FirefoxやIEではエラーになりません。今後のアップデートでエラーが出なくなったとしても安全にできるということが必要だと思っています。 エラーがでなくなったとしてもresponse.URLをチェックしておけばいい、という手も考えられるんですが、現在のChromeは、セイムオリジンへリダイレクトしたときのresponse.URLはリダイレクト前のものを返していて、これと同じようになるとまずいです。クロスオリジンへのリダイレクトのエラーがなくなって、かつ、response.URLがリダイレクト後のURLを返すことが確認できたら、XHRを使って良いんじゃないかと考えています。 webRequestでやるのは考えたことがなかったです。こっちでいけるかもしれないですね、調べてみます。 リダイレクトとCORSとresponseTypeのdocument指定を組み合わせて実行するページを置きました。 |
何度もすみません。単純な話でなかったんですね。 |
リダイレクトとresponse.URLがちゃんと機能していれば単純な話だったですけどね。 webRequestの方を調べてみたらブロックできそうでした。ありがとうございます。 |
permissionsにhttp:///やhttps:/// を追加するとエラーが無くなったりしませんかね? |
permissions足せばエラー消えますね。 webRequestでクロスオリジンアクセスをブロックするバージョンを作りました。 |
ありがとうございます。実装が素晴らしいですね。こちらでも試させてもらいますー |
についてはドキュメントのURLの部分がまだ実装されていない (https://code.google.com/p/chromium/issues/detail?id=379676) ため利用できませんが、 このプロパティを使うと、下記のように実装できて |
@xKerman Chromeもリリース版でresponseURL使えるんですね。素晴らしいです。 |
Chrome 26 で
「Refused to display 'http://www.tumblr.com/dashboard/3/48859274965' in a frame because it set 'X-Frame-Options' to 'deny'. 」
のエラーで読み込みが出来なくなっていました。
XMLHttpRequest を使って読みこむように変更しました。
createHTMLDocumentByString() を使っても上手くいかなかったので、
Taberareloo から createHTML() を持って来ました。
強引な感じでコードを汚してしまって申し訳ありません。
適宜見直して頂けると幸いです。
よろしくお願いします。