function makeLinks(context, url) {
var sets = context ? $(context + ' a') : $('a'),
prot = url || window.location.protocol;
if(prot.match(/https/)){
lockup(sets);
}
function lockup(elem) {
elem.each(function(){
var self = $(this),
href = self.attr('href');
if(href.match(/http[^s]/)){
// This logs the correct output
console.log(href.replace('http','https'));
// This fails
href.replace('http','https');
}
});
}
}
この関数の目的は、ウィンドウ オブジェクトの現在のプロトコルを確認することです。
「https:」の場合、「http」の href を持つアンカーを「https」にする必要があります。
関数は次のように呼び出されます: makeLinks('#wrapper', 'https:');
2 番目のパラメーターはテスト用です。それ以外の場合は、window.location.protocol を使用します。
現在、マークアップでこの関数を呼び出すと、次のようになります。
<a href="http://cross-origin-denial.com"></a>
<a href="http://pleasesecureme.com"></a>
<a href="https://imcool.com"></a>
<div id="wrapper">
<a href="http://cross-origin-denial.com"></a>
<a href="http://imscrewed.com"></a>
<a href="http://yougotmetoo.com"></a>
<a href="https://imcool.com"></a>
</div>
コンソールは私が望んでいることを正確に記録しますが、実際の href は DOM 内で変更されません。
Chrome と Firefox でこれをテストしましたが、同じ結果が得られまし
た。私のロジックがどこか (またはどこでも) 間違っていると確信してい
ます。