2011-09-24 203 views
-1

我試圖編寫一個全局JavaScript函數,它在頁面加載之前覆蓋任何HTML對象(imgiframe,鏈接等)。 Overiding操作的目的是將這些對象的SRCHREF使用DOM更改爲任何其他鏈接。在對象完成加載之前,在JavaScript中觸發事件

不幸的是,我沒有找到任何解決方案,沒有首先加載的對象,只有然後改變它onload事件。

我的第二個選擇是通過將這些屬性與正則表達式匹配並替換結果值來更改SRCHREF。我寧願不這樣做,因爲它速度很慢並且耗費大量時間。

如果有人能夠分享他/她的經驗並幫助我解決這個問題,我會很高興。

+0

你爲什麼要用這個javascript? – rlemon

+0

我想用Javascript做它,因爲它將被嵌入到我沒有寫入的外部頁面中。 Bakudan - 沒關係,如果你不想幫忙。 –

+0

@Niv Sela你的問題在於這個概念,這裏的每個答案都是對我DELETED評論的一個很好的重寫。你仍然無法操縱那些不存在的東西 - DOM應該被加載來操縱它!所以你想要的是不可能的。 – Bakudan

回答

0

JavaScript只適用於DOM。

然而,您可以通過AJAX加載頁面,獲取內容並對其進行任何字符串操作。

+0

嘿,謝謝你的評論! 問題是,我想要在通過代理下載的外部頁面中嵌入腳本。 我可以遍歷所有鏈接並做我想做的任何事情,但我正在尋找更方便的東西,不需要任何特殊的威脅或解析能力。 –

0

如果您嘗試修改頁面的靜態HTML中存在的項目,則只有在瀏覽器成功加載它們之前,才能使用javascript對其進行修改。在此之前無法修改它們。在您有機會修改它們之前,它們可能會或可能不會被觀衆看到。

要解決此問題,有幾個選項。

  1. 在導致要修改所有項目的頁面中加入CSS樣式規則最初被隱藏,那麼你的JavaScript可以對其進行修改,然後告訴他們,使他們不會將您的修改之前看到。
  2. 請勿將要修改的項目放入HTML頁面的靜態部分。您可以使用javascript以編程方式創建它們,並將它們插入到頁面中,或者可以通過ajax加載它們,然後在通過ajax加載它們之後進行修改,然後將它們插入到頁面中。

對於這兩種情況,如果未啓用javascript,則必須制定後備計劃。

+0

嘿,謝謝你的評論! 第一個選項可以工作,但我一直在尋找更多的邏輯,像覆蓋「BeforeLoading」事件;) 我說的第二個選項不是不可能的,因爲我不是第一個創建頁面的人。 –

+0

沒有「BeforeLoading」事件。瀏覽器不提供這種功能。部分原因是瀏覽器在頁面加載過程中進行漸進顯示。因此,沒有單個時間點加載頁面並且可以對其進行操作,但尚未顯示。他們可以嘗試通知您個別元素(加載時,但在顯示之前),但他們不這樣做會有些複雜。 – jfriend00

+0

是的,這就是爲什麼我把笑臉。根據我的研究,我沒有發現任何類似的東西,這就是爲什麼我問專家;) 我知道我可以通過解析頁面內容來做到這一點,但它很笨拙。如果你熟悉任何能夠通過不使用100%正則表達式處理來改變鏈接的東西,那將是非常棒的:) 我寫了下面的正則表達式(適合幾乎90%的情況),但它的工作速度非常慢...([。\ | \]](https:\/\ /)?[^ \ /] +/*(「)。 $ domain_noend。「\。(com | co \ .il))?/?([^'\」<>] *)['| \「]?# –

相關問題