瀏覽器鏈接批量檢測插件改造

背景&問題

我們的網(wǎng)站每天都會安排進行功能檢查,對于關(guān)鍵性的頁面今野,還會進行全頁面的鏈接可用性掃描葡公。之前一直用的是Google瀏覽器上Check My Links這個擴展插件,總體來說速度還是很快的条霜。
但是隨著我們網(wǎng)站的安全升級催什,對于它高頻觸發(fā)的請求,我們會進行攔截重定向到鎖定頁面宰睡。然而由于是重定向蒲凶,它識別不出來這個鏈接是否有問題,會被當成正巢鹉冢可用旋圆。
因此檢測結(jié)果已經(jīng)不能作為我們的測試依據(jù),有必要對它進行改造麸恍。

訪問高頻

解決方案

嘗試直接改造Check My Links插件(失敗方案)

實際業(yè)務中灵巧,我們服務端實際上是約定過特定ip+請求UA的白名單機制,而且這個插件項目是開源的抹沪,于是一開始便打算對這個插件進行適應的改造刻肄。
然而分析了它源碼、進行改造調(diào)試后發(fā)現(xiàn)融欧,它的核心方法里敏弃,實際上是忽略了XMLHTTPRequest請求出錯的情況。而且谷歌瀏覽器上遵循的W3C要求噪馏,請求UA不讓修改的麦到。

改造為Firefox插件(應用方案)

Check My Links里面用了很多chrome特有的Api,所以這一步我并沒有直接把它遷移到Firefox欠肾,而是二次改造Firefox上的Simple Link Checker這個插件瓶颠,并結(jié)合我們自身的需求進行了更為深度的功能定制。

新功能點

  • 定制請求頭
  • 請求頻率控制
  • 增加高頻訪問統(tǒng)計
  • 增加失敗重試機制
  • 大批量異步并發(fā)轉(zhuǎn)為同步
  • 異常位置高亮報警

核心源碼

定制化請求頭參數(shù):

遷移到firefox也是因為這個關(guān)鍵性的參數(shù)setRequestHeader在chrome不被允許修改請求UA董济,而firefox的協(xié)議是可以的步清。

var XMLHttpTimeout, client = new XMLHttpRequest();
client.open('GET', url, true);
const brower_UA = navigator.userAgent;
const custom_UA = `${brower_UA} Test-Header-XXX`
client.setRequestHeader("user-agent", custom_UA);
client.send();
獲取當前頁面所有的鏈接:
var links = document.getElementsByTagName("a");
封裝異步檢測方法要门,并在for循環(huán)里同步處理:
function sendMessagePromise(url) {
    return new Promise((resolve, reject) => {
        chrome.runtime.sendMessage({
            "action": "check",
            "url": url,
        }, function(response) {
            resolve(response);
        });
    });
}

async function linkCheck() {
    for (let i=0; i<filterLinks.length; i++){
        const ele = filterLinks[i]
        const url = ele.href;
        await sendMessagePromise(url)
          .then(response => {
              doSomething(response)        
          }
    }
}
失敗重試機制

在原來的chrome插件里虏肾,對于請求失敗的訪問廓啊,默認statusCode為0,雖然這是比較小概率的出現(xiàn)的封豪,但是這樣強制改寫結(jié)果為通過谴轮,肯定是不合理的。
因此我這里是增加了對XMLHttpRequest.onError的異常捕獲吹埠,并封裝了可參數(shù)化調(diào)用的重試方法第步,默認5次還不成功會拋出錯誤。

function check(url, retryCount = 5) {
    var XMLHttpTimeout, client = new XMLHttpRequest();
    ...
    client.onerror = function(e) {
        if (retryCount <= 0) {
            resolve({
                status: 400,
                message: url,
            });
        }else {
            check(url, --retryCount)
        }
    };
}
高亮顯示報錯元素

對于報錯的元素位置缘琅,之前工具只會是以紅色背景色展示,對于我們整體主色調(diào)本身就是紅色的網(wǎng)站來說翩隧,很不友好堆生,有時還找不到。
因此本次我們對于報錯的位置雷酪,結(jié)合CSS動畫淑仆,進行了閃動處理,幫助檢測人員快速定位到異常發(fā)生的位置哥力。


報錯高亮
@keyframes fade {
    from {
        opacity:1.0;
    }
    50% {
        opacity:0.4;
    }
    to {
        opacity:1.0;
    }
    }@-webkit-keyframes fade {
        from {
        opacity:1.0;
    }
    50% {
        opacity:0.4;
    }
    to {
        opacity:1.0;
    }
}

.Fail {
    border-radius:2px;
    border-color:#c0392b;
    color:#fff!important;
    background-color:#c0392b!important;
    animation:fade 600ms infinite;
    -webkit-animation:fade 600ms infinite;
}

結(jié)語

這個定制化插件蔗怠,現(xiàn)階段僅作為之前chrome的插件的替代升級工具。但長遠的看省骂,我們還可以結(jié)合業(yè)務做更多的擴展功能蟀淮,看后期的使用發(fā)展和需求吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钞澳,一起剝皮案震驚了整個濱河市轧粟,隨后出現(xiàn)的幾起案子策治,更是在濱河造成了極大的恐慌,老刑警劉巖兰吟,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件通惫,死亡現(xiàn)場離奇詭異,居然都是意外死亡混蔼,警方通過查閱死者的電腦和手機遵湖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門悔政,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人延旧,你說我怎么就攤上這事谋国。” “怎么了迁沫?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵芦瘾,是天一觀的道長。 經(jīng)常有香客問我集畅,道長近弟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任挺智,我火速辦了婚禮藐吮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逃贝。我一直安慰自己谣辞,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布沐扳。 她就那樣靜靜地躺著泥从,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沪摄。 梳的紋絲不亂的頭發(fā)上躯嫉,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音杨拐,去河邊找鬼祈餐。 笑死,一個胖子當著我的面吹牛哄陶,可吹牛的內(nèi)容都是我干的帆阳。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼屋吨,長吁一口氣:“原來是場噩夢啊……” “哼蜒谤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起至扰,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤鳍徽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后敢课,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阶祭,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡绷杜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了濒募。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片接剩。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖萨咳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疫稿,我是刑警寧澤培他,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站遗座,受9級特大地震影響舀凛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜途蒋,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一猛遍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧号坡,春花似錦懊烤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至畜隶,卻和暖如春壁肋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背籽慢。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工浸遗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人箱亿。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓跛锌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親届惋。 傳聞我的和親對象是個殘疾皇子察净,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361