croco.siteをスキップ
< Spätná väzba na crocoSkipper
マサカリ飛んできた!痛気持ち良い
splitを使ってる理由は、URLの「?l=」以前の文字数が一定かどうかわからなかったからですが、多分変わるのはwwwの有無ぐらいですかね
URLのパターンありがとうございました パターンを考慮したり無限ループを直したりしてみます
この分野に関しては初心者なのですが(略)
v1.4のコードを読んだのですが、転送先URLがhttpsだった場合(例:href.li)はdest_url = "http://https://href.li/?http://example.com/";
となりおかしくなってしまうようです。
また、?l= が複数個ある場合の対処も考えてみたのですがいかがでしょうか。(function() {
var current_url = location.href;
var separator = "?l=";
var index;
if ((index = current_url.indexOf(separator)) === -1) {
return;
}
var dest_url = current_url.slice(index + separator.length);
if (dest_url.indexOf("://") === -1) {
dest_url = "http://" + dest_url;
}
location.href = dest_url;
})();
正直?l=
の部分が変更されることは無いはずですが(既に使っているサイトが困ってしまうので)、自分的には"?l=".length
やindex + 3
では気味が悪いのでseparator
に入れています。動けば良いんですよ、動けば
なるほど、sliceで切り出せってそういうことでしたか
if文の判定もdest_url.indexOf("://") === -1
で良いんですね
危うくhttps用のif文を追記するところでした
ロジックは良さそうだし変数も整理されてるし僕のコードが入る余地がないじゃないですかやだー どうしようもないので書いて頂いたこれをそのまま1.5にしました また何か書いたら勉強させてください
URLに「?l=」が含まれない場合の動作について
croco.site(croco.me)にはリダイレクトを含めると以下の4パターンのURLが考えられます("→"はJSによるページ遷移です)。
(1) http://www.croco.site/fUpG5PA4/?l=mint.2ch.net/test/read.cgi/download/1480597080/ → http://www.croco.site/sk78s5E2zq
(2) http://croco.site/fUpG5PA4/?l=mint.2ch.net/test/read.cgi/download/1480597080/ → http://www.croco.site/sk78s5E2zq
(3) http://www.croco.site/sk78s5E2zq
(4) http://croco.site/sk78s5E2zq
スクリプトが期待した動作となるのは(1)と(4)の場合のみで、(2)のような「www.」を含まないURLではそもそもスクリプトが動作しませんし、(3)のような「?l=」を含まないURLにアクセスした場合は
location.href.split("?l=")[1]
の部分がundefinedになりループに陥ってしまいます。また、存在するかはわかりませんが「?l=」が複数個あるようなURLだった場合、2個目以降の部分が無視されてしまいます。
split
ではなくsubstr
などで切り出すのはどうでしょうか?