如何預防瑞星卡卡讓JavaScript卡殼

來源:互聯網
上載者:User

瑞星卡卡最近讓我比較煩。

為了提醒淘寶買家在購買自動發貨商品時避免被騙,運營希望使用者在進入自動發貨商品購買頁時,必須先閱讀以LightBox形式彈出的防騙提示並點擊確定按鈕後方才進行購買。如圖:

防騙提示層預設置中,如果買家在訪問此頁面時,改變瀏覽器視窗的大小,那麼防騙提示層會重新計算位置以保持置中。可是安裝了瑞星卡卡的IE使用者改變瀏覽器視窗時,提示層的內容突然消失了,而半透明遮蔽層依然存在,因為買家必須點擊了[確定]按鈕,遮蔽層才會消失。這樣一來買家就只能面對著灰濛濛的瀏覽器視窗手足無措。客服和運營馬上就會有人來興師問罪。

經過測試研究,瑞星卡卡果然是沿循事不過三的傳統關卡原則。估計它的偵測原理就是——只要頁面元素的top, left 樣式屬性變化了三次以上,就會被其認為是浮動廣告繼而殲之。

在自動發貨商品的購買頁上,我註冊了window.onresize事件來進行防騙提示層的定位控制。 當買家改變瀏覽器視窗大小時,防騙提示層樣式的top,left屬性就會被多次計算並設定。 於是就中了瑞星卡卡的埋伏。提示層的內容就會被清除。[確定]按鈕也就被清除了,買家無法點擊[確定],遮蔽層不會消失,也就無法繼續購買。

我的解決有二:

第一註冊ESC鍵盤事件,即便提示內容被瑞星卡卡清除,只要買家按下ESC鍵時,會取消提示。遮蔽層也會消失。

顯然這個方法於事無補。

第二就是編寫額外的JavaScript檢測浮動層的內容是否發生變化。瑞星卡卡會把其視為浮動廣告層的innerHTML替換為:

<img s rc=”file:///C:/Program&20Files/Resing/AntiSpyware/Floating.gif” />

我的方法就是在每次定位浮動層後執行一個方法檢測層內容中的某個元素是否還存在,如果不存在了,則說明內容被卡了。於是就執行補救的措施。偽碼如下:

<id=”FloatLayer”>
<div id=”InnerObject”>xxx</div>
</div>
<script type=”text/javascript”>
function setPosition() {
FloatLayer.style.top = y;
FloatLayer.style.left = x;
setTimeout(checkKK, 100);
}
function checkKK() {
if ( ! InnerObject exists )
fixUp();
}
</script>

當然,最好的辦法是說服使用者取消對網站的廣告屏蔽,可是,何時才會有一個善良的互連網呢?



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.