2016-07-10 18 views
0

私は、特定のウェブサイトからのURLを変更して、非常に小さなサムネイルを適切に表示できるようにSafari拡張機能を作成しています。 URLは次の形式である:ページロード前のリクエストURLをSafari拡張子に置き換える

https://static.example.com/data/thumb/eb68634f5a5e3959e03be2af7c0b88ab.png 

しかし、私はそれがその後、注入されたスタイルシートを使用して異なって表示されます元、フルサイズの画像をロードすること、負荷前のURLからthumb/を取り除くしたいです(既に働いています)。

リスナーが私を助けてくれるかもしれないと私は理解していますが、このウェブサイト上でリクエストを本質的に書き直す方法については適切な文書を見つけることができませんでした。

既存のURLの取得と変更が完了しました。

document.addEventListener("beforeload", handleBeforeLoadEvent, true); 

function handleBeforeLoadEvent(event) 
{ 
    if(event.url.match(/https:\/\/static.example.com\/data\/thumb\/(.+)/g)) { 
     console.log(event.url.replace("thumb/", "")); 
    } 
} 

出力する、予想通り、このスタイルのURLを:私は、次のテストコードを使用しています

https://static.example.com/data/eb68634f5a5e3959e03be2af7c0b88ab.png 

しかし、それはまだは、新しい値にevent.urlを設定しません。私はevent.preventDefault()をキャンセルすることができますのリクエストをキャンセルしますが、URLを変更する必要があります。

私は誰かがこれで私を助けることを願っています!私はこれらのブラウザを定期的に使用しているので、FirefoxやGoogle Chromeのウェブブラウザでも理論的にはうまくいく可能性がある場合はボーナスポイントとなります。

答えて

1

プロパティevent.urlは読み取り専用です。しかし、このようなものは動作するはず:

ある
document.addEventListener('beforeload', function (evt) { 
    if (evt.target instanceof HTMLImageElement) { 
    if (/https?:\/\/static\.example\.com\/data\/thumb\//.test(evt.url)) { 
     evt.preventDefault(); 
     evt.target.src = evt.target.src.replace('/thumb', ''); 
    } 
    } 
}, true); 

は、あなたがターゲット画像がある場合は最初にテストするために、イベントのtargetプロパティを利用して、そうであれば、画像のsrcプロパティを変更します。

+0

これは機能します。しかし、私はちょうど深刻な問題を抱えていました - オリジナルはPNGではない場合もあります。サムネイルは常にPNGです。 JPG、PNG、GIFのすべてを 'ping'して拡張機能になっているかどうかを知ることはできますか? – Forest

+0

いいえ、あなたが本当に決まっているのであれば、それぞれの画像の可能性を目に見えないように読み込み、読み込んだもの( 'load'イベントを使って)を明らかにして、他のものを破棄することができます。 – canisbos

関連する問題