2012-12-11 25 views
2

出於某種原因,它似乎像IE9(我相信IE8過,但不知道),在我的內容的途中注入IE注入VBScript變量中呈現的中間,造成畸形的HTML

<SCRIPT LANGUAGE=VBScript>on error resume next pluginFound = IsObject(CreateObject("DIFFERENT PLUGIN EVERY TIME")) 

沒有任何關於周圍的情況。這意味着它被添加到屬性的中間,或者在一些JavaScript的中間,導致HTML格式不正確並導致各種問題。

這發生在具有不同插件的多臺計算機上,因此它不是特定於計算機的。而且這也不一致:違規腳本注入的位置不同,違規腳本也不盡相同。有時你會得到幾個頁面加載沒有問題,然後你會得到破碎的HTML。

Developer Tools

我的頁面使用了相當數量的JS,但沒有瘋狂。目前它正在使用jQuery,Google Maps,Bootstrap,Google Tag Manager以及用他們自己的小JS片段加載一對Twitter,Google +和Facebook Iframe。所以,有一些異步回調發生,但我不認爲這會影響瀏覽器如何呈現DOM,以及何時決定注入插件代碼。

如果您重新加載http://www.rew.ca/properties/search/839721足夠的次數,則可以看到問題。如果您滾動到頁面底部,您會看到原始的JSON,或者有時候會在頁面中間顯示一些隨機的HTML片段(因爲標籤不匹配)。

任何想法,爲什麼這些腳本被任意注入以及如何解決該問題?

感謝

[更新] 這裏得到包含在HTML內容中間的script標籤的另一個例子: enter image description here

+0

我不能用任何數量的刷新重現這一點。你有沒有試過瀏覽IE瀏覽器禁用插件的網站? –

+0

即使添加了Flash和Adobe PDF鏈接助手,我也無法在虛擬機上的W7上的IE9上重現它。但在其他幾臺機器上(一些基本安裝,只有「工廠」插件)仍然存在。不知道它是否發生與禁用插件,但我會試一試。但是,我不能要求用戶禁用插件來訪問我的網站。 –

回答

3

在我看來,問題出在http://cn.clickable.net/js/cct.js腳本,特別是在所述__cct_tracker類的IsIEPlugin方法:

this.IsIEPlugin = function (e) { 
    var t = !1; 
    return document.write('<SCRIPT LANGUAGE=VBScript>\n on error resume next \n pluginFound = IsObject(CreateObject("' + e + '")) </SCR' + "IPT>\n"), t ? 1 : 0 
} 

此方法叫了幾次,使用不同的參數:

this.pixelRequestParams.cctDir = this.IsIEPlugin("SWCtl.SWCtl.1"), 
this.pixelRequestParams.cctFlashPlugin = this.IsIEPlugin("ShockwaveFlash.ShockwaveFlash.1"); 
if (this.IsIEPlugin("PDF.PdfCtrl.1") == 1 || 
    this.IsIEPlugin("PDF.PdfCtrl.5") == 1 || 
    this.IsIEPlugin("PDF.PdfCtrl.6") == 1) 
    this.pixelRequestParams.cctPdf = 1; 
this.pixelRequestParams.cctQuickTime = this.IsIEPlugin("Quicktime.Quicktime"), 
this.pixelRequestParams.cctRealPlayer = this.IsIEPlugin("rmocx.RealPlayer G2 Control.1"), 
this.pixelRequestParams.cctWmPlayer = this.IsIEPlugin("wmplayer.ocx") 

我想(即使我不知道)認爲,「CCT」代表「可點擊的轉換跟蹤」,所以它必須是某種形式的跟蹤代碼。
經過進一步調查後,我確定「cct.js」腳本被Google Tag Manager(GTM)腳本http://www.googletagmanager.com/gtm.js加載。
所以,如果我沒有錯,通過從您的HTML頁面中刪除GTM代碼片段,您應該能夠解決問題。
似乎由GTM JavaScript代碼動態注入的VBSCRIPT代碼有時不會執行,但不要問我爲什麼,因爲我不知道。

+0

不錯的發現!我實際上得出的結論是,它也必須與GTM相關(通過消除,從頁面中刪除代碼塊,而不是像你的發現那樣詳細)。奇怪的是,它似乎已經停止發生,或者至少錯誤頻率減少了。我不確定是否有人在GTM配置方面改變了一些東西。 –