2013-12-21 53 views
0

我需要在每一位完成下載後觸發一段代碼。如果在加載所有內容後注入腳本,該腳本就可以工作,但是如何自動觸發該腳本?

我的腳本是:

var divId = "jwplayer-0_wrapper"; 
if ($('#' + divId).length == 1) { 
    myReg = /https?:\/\/www\.youtube\.com\/watch\?v=[^"]+/; 
    var plainText = $('#' + divId).parent().children('script').text(); 
    var url = plainText.match(myReg); 
    if (url !== null) { 
     window.location = url; 
    }; 
}; 

它是用來跳過某些網站,決定使用JW玩家巫婆,我覺得可怕的馬車。因此它會尋找一個帶有JW播放器指示的div,如果有的話,它會找到與原始YouTube視頻的鏈接並直接進入該網站。

它通過谷歌瀏覽器插件命名爲Javascript注入器,並在我訪問的每個頁面上應用該腳本。插件在www.ayoye.cowww.veuxturire.com等網站上運行良好。但在其他使用相同pathern的網站上,腳本似乎過早觸發。例如,www.mondedestars.comwww.lesautos.ca觸發它爲時尚早。

如果我在頁面加載完成後使用Add on的「注入」功能,那麼它會按照預期將我重定向到youtube頁面。我迷失在爲什麼它在某些地方工作而不是其他地方。

我不想在這裏理解每一個網站,我寧願讓它在頁面完成從它的php,ajax,腳本,flash,html和CSS加載之後動態觸發。

我已經試過尋找JWplayer API,但由於它對我來說非常不清楚,因爲它在Flash中的偏愛,如果有一種方法可以觸發它,或者可能只是觸發它在我徘徊在身體後,因爲每個網站都有一個身體。它不能具體到一個頁面。

+1

jQuery document.ready()也不起作用? – DOK

+1

@DOK:'$(document).ready'在**'$(window).load'之前觸發**。 –

+1

通常情況下,jQuery在DOM完全加載之後以及所有資源完全收到之前觸發。這只是一些不同的 - 而且很容易 - 嘗試。 – DOK

回答

1

使用這樣的

var timer; 

function injectYouTube() { 
    // DO YOUR STUFF HERE 
    // ONCE DONE CALL clearInterval(timer); 
    clearInterval(timer); 
} 

timer = setInterval(injectYouTube, 2000); 

我不是說一切都加載後將其稱爲而是可以確保當你想要它到你的代碼被執行。

+0

謝謝你這麼拼湊,這是拼圖的最後一塊! –

+0

我很高興這爲你解決。 – Neutralizer

0

悲觀的答案是,你不能等到一頁完成所有的AJAX操作等,因爲網頁可以繼續無限期地加載新的內容,如果他們希望。

您可能會考慮在每次將新的HTML元素添加到頁面時運行代碼。這樣,您可以肯定在JWPlayer插入頁面的那一刻就可以抓住JWPlayer。

document.addEventListener("DOMNodeInserted", yourRemovalFunction); 
+0

有趣。這在所有專業瀏覽器中都支持嗎? – Neutralizer

+0

否(Firefox特別推薦使用它們),但它們在Chrome中運行,所以應該使用Javascript Injector附加組件。 – Jack

1

JWPlayer API並不困難。即使不知道容器ID,您也可以查看所需的信息。
這是一個例子:

var player = jwplayer(0); // get the first jwplayer element of the page 
var video = player.getPlaylistItem(); // get the player video 
var url = video.file // retrieve the video url 

我認爲的setTimeout或setInterval的是不可靠的。
在jwplayer onReady事件上設置監聽器會更好。

+0

可能,但我不是先進的JavaScript,它確實工作出色,謝謝你艱難,我會嘗試一次,我有時間 –

+0

我不認爲setInterval是不可靠的。因爲在某些情況下,您希望在閱讀之前等待AJAX​​調用完成DOM。因此,使用setInterval可以在目標節點上保留選項卡。 – Neutralizer

+0

如果AJAX調用掛起超過2秒,該怎麼辦? – pasine

相關問題