如果$(window).load(function(){})怎么办;太早了

时间:2013-12-21 17:28:06

标签: javascript jquery triggers

我需要在下载完每一位后触发一段代码。如果在加载完所有内容后注入该脚本,但该如何自动触发?

我的脚本是:

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视频的链接并直接进入那里。

由Google Chrome加载项启动,名为Javascript Injector,我在我访问的每个页面上应用该脚本。插件在www.ayoye.cowww.veuxturire.com等网站上运行良好。但在其他使用相同功能的网站上,似乎脚本过早触发了。例如,www.mondedestars.comwww.lesautos.ca会过早触发它。

如果我在页面加载完成后使用“立即注入”功能,那么它会按预期将我重定向到youtube页面。我迷失了为什么它在某些地方工作而不是其他地方。

我不想在这里理解每一个网站,我更喜欢在页面完成从php,ajax,脚本,flash,html和CSS加载所有内容后动态触发。

我试着看看JWplayer API,但是由于它非常不清楚,因为它在闪存中的部分事实,如果有一种方法可以触发它,或者可能只是触发它,它会变得更简单在我盘旋在身体上之后,因为每个站点都有一个身体。它不能专门针对一个页面。

3 个答案:

答案 0 :(得分:1)

使用类似的东西

var timer;

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

timer = setInterval(injectYouTube, 2000);

我并不是说在加载完所有内容后会调用它,而是可以确保在需要时执行代码。

答案 1 :(得分: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事件上设置监听器会更好。

答案 2 :(得分:0)

对此的悲观回答是,您不能等到页面完成所有AJAX操作等,因为网页可以根据需要无限期地继续加载新内容。

每次将新的HTML元素添加到页面时,您可能会考虑运行代码。这样,您可以确保在插入页面时捕获JWPlayer。

document.addEventListener("DOMNodeInserted", yourRemovalFunction);