2016-03-08 112 views
1

是否有可能確定DOM元素最初是在源代碼中還是通過其他js注入廣告服務器?是否通過JS注入DOM元素?

觀察突變不是解決方案,因爲我在頁面呈現後訪問頁面。

+3

做我敢打賭,沒有辦法做到這一點,如果你只啓動觀察完全呈現的DOM。 DOM本身並不通過HTML或DOM操作來區分它的節點。 –

+2

我能想到的唯一方法是在另一個窗口或iframe中重新加載頁面,並在這個頁面上添加MutationObserver。然後你可以在DOM中獲得位置並找回原始窗口中哪些元素對應。 – Kaiido

+0

@Kaiido,聽我的突變可以得到突變的來源嗎?那麼我能否看到是什麼引發了這種變異? – Manuel

回答

0

如果您可以在進一步的js動作之前保存HTML源代碼,那麼比較新的HTML代碼與舊的HTML代碼,如果它們不相等 - 通過js插入元素。

+1

「觀看突變不是解決方案,因爲我在頁面呈現後才能訪問頁面。」 – clinei

+0

即使沒有這個限制,即使沒有通過js注入body元素,document.body.style.width ='500px'也會改變outerHTML。 – Kaiido

1

,如果你什麼檢查HTML源代碼,你可以做一個Ajax請求的頁面,獲取內容和檢查的差異

2

您可以發送XMLHttpRequest相同的URL,以GET原網站內容,解析DOM,刪除不喜歡的任何腳本,將其放入屏幕外iframe,以便非外部腳本可以運行並將iframe的內容與當前內容進行比較。

我做了兩個小提琴展示如何可以這樣做: target siteyour JS

文件的比較可以與isEqualNode

+0

您至少應該比較DOMParser解析的結果。但是通過js在元素上設置屬性並不意味着你已經注入了元素。 – Kaiido

+0

是否有任何替代DOMParser執行內聯js但不包括外部js? – Manuel

+0

@Manuel'DOMParser'不執行任何腳本。你可以根據它們的'src'屬性從被解析的DOM中刪除腳本,然後把內容放到一個離屏的'iframe'中,讓內容加載,然後比較__that__ – clinei