JavaScriptによってトップページにリダイレクトされるページがあります。
ブラウザ上でページを確認したいのですが、jsをオフにして確認したところ、そのページで読み込まれていたすべてのJSが実行されないため、正常にページを開くことができません。
リダイレクトのコードはlocation.hrefです。
リダイレクトの実行のみを止める方法はないでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
各プロパティの descriptor
参考情報。
JavaScript
1/** 2 * location.href 3 */ 4console.log(Object.getOwnPropertyDescriptor(location, 'href')); // {value: "https://teratail.com/questions/121608", writable: true, enumerable: true, configurable: false} 5 6/** 7 * location.replace 8 */ 9console.log(Object.getOwnPropertyDescriptor(location, 'replace')); // {value: ƒ, writable: false, enumerable: true, configurable: false} 10 11/** 12 * window.location 13 */ 14console.log(Object.getOwnPropertyDescriptor(window, 'location')); // {value: Location, writable: true, enumerable: true, configurable: false} 15 16/** 17 * window.window 18 */ 19console.log(Object.getOwnPropertyDescriptor(window, 'window')); // {value: Window, writable: false, enumerable: true, configurable: false}
location.href
前述の通り、location.href
は書き換えできず、グローバルオブジェクトに至るまで、上位オブジェクトも書き換え出来ません。
従って、スコープを汚すことが出来なければ、制御不可能と思われます。
JavaScript
1(function (location) {[ 2 // この中では locstion の名前は書き換えられた location を参照する (location から始まらなければ回避可能) 3}(customLocation)); // 書き換えたlocationを渡す
Re: gori さん
投稿2018/04/12 15:41
編集2018/04/13 13:32総合スコア18194
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
参考を貼っていただきありがとうございます。
確か location.hrefだったと思います。
location.hrefだった場合にリダイレクトを止める方法はありますでしょうか。
親記事に追記しました。
スコープを汚す方法について教えていただきたいです。
ブラウザのアドオン「Greasemonkey」 等を使用して、リダイレクトのコードより先にスクリプトを実行して、リダイレクトを止めるとかでしょうか。
コード全体を即時関数で括って、ダミーオブジェクトを渡してください。
質問を改めて読みましたが、他人のサイトを確認したいのでしょうか。自分に管理権限がない?
htmlのみ更新が認められているページですね。
特定のクッキーを読み込んでいないとリダイレクトされるページで、更新時のブラウザでの確認でクッキーの切り替えが手間だったので他に方法がないか模索していました。
読み込んでいるJSに対して修正することはできないです。
HTMLが参照する外部JSの参照先を書き換えて、location.hrefを削除したJSファイルを指定してやればいいのではないでしょうか。
オリジナルのJSコードから location.href を削除すれば、期待通りに動作しそうな気がします。
でなければ、Proxomitronで直接書き換えるか。
「スコープを汚す」とはスコープチェーン上でグローバルスコープに辿り着く前に関数スコープ/ブロックスコープを置いて、任意の改変した location という名前のオブジェクトを定義しておくことです。コードを書き換えられなければ、無理です。
> 特定のクッキーを読み込んでいないとリダイレクトされるページで、更新時のブラウザでの確認でクッキーの切り替えが手間だったので他に方法がないか模索していました。
これが気になるのですが、Cookieを切り替えるのが正攻法のはずで、リダイレクトの処理の切り替えるだけで、本当に意味のあるテストになるのでしょうか。
CookieA … リダイレクトされる(動作A)
CookieB … リダイレクトされない(動作B)
CookieA(リダイレクト処理無効化) … リダイレクトされない(動作C)
動作Aと動作Cが同じ挙動である確証はありますか。
リダイレクト処理以外で切り替わる処理がない事は保証されていますか。
ページの体裁のみを確認する想定ですが、確かに同じ挙動になるかはリダイレクト処理を無効にしてみないことには分からないですね。
やってみても分からない(気づかない処理がある)場合があるので、コードを作った人に聞くべきだと私は思います。
そうですね、問題解決にはなりませんが、自分がやろうとしていることが徒労に終わるかもしれないということですね。
実際のページも見せていないのにここまで問題解決に協力いただきありがとうございます。
回答していて、「実はこの質問は意味がないことが分かりました。やってみたらできなかったので、~の方法で自己解決しました。」といわれて、自己解決ベストアンサーされるとがっくりくるので、やる前に確認すべきことは徹底して頂けると助かります。
質問Aにマッチする回答Aがあり、質問Bでないと解決できなかったので自前で回答Bを用意してクローズする。
これは後々、質問Aを求めてこのスレッドを訪れる人にとってノイズになります。
知の共有という観点では、「回答Aをベストアンサーとし、回答Bは補足事項としてこっそりどこかに追記しておく」がベストだと思います。
この質問が後々、参考にされることを考慮した上で適切な処理をお願いします。
承知しました。ベストアンサーとさせていただきます。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。