Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果$(window.load)(function(){}),该怎么办;现在还为时过早_Javascript_Jquery_Triggers - Fatal编程技术网

Javascript 如果$(window.load)(function(){}),该怎么办;现在还为时过早

Javascript 如果$(window.load)(function(){}),该怎么办;现在还为时过早,javascript,jquery,triggers,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').

我需要在下载完每一位后触发一段代码。如果在加载所有内容后注入脚本,那么脚本可以工作,但是如何自动触发呢

我的剧本是:

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 Injector的Google Chrome插件触发的,我在访问的每个页面上应用该脚本。插件在和这样的站点上工作得非常好。但在其他使用相同路径的网站上,脚本似乎触发得太早了。例如,在那里,并触发它太早

如果我在页面加载完成后使用插件的“InjectNow”功能,那么它会按预期将我重定向到youtube页面。我不明白为什么它在某些地方有效,而在其他地方无效

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


我曾尝试查看JWplayer API,但由于它对我来说非常不清楚,因为它部分在flash中,如果有一种方法可以在之后触发它,或者可能只是在我悬停在主体上之后触发它,那么会更简单,因为每个站点都有主体。它不能只针对一个页面。

使用类似的方式

var timer;

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

timer = setInterval(injectYouTube, 2000);

我并不是说在加载所有内容后会调用它,而是说您可以确保代码在您希望的时候执行。

对此悲观的回答是,您不能等到页面完成所有AJAX操作等,因为如果web页面愿意,可以无限期地继续加载新内容

您可能会考虑每次在页面中添加新的HTML元素时运行代码。这样,在将JWPlayer插入页面的那一刻,您就可以肯定地捕捉到它

document.addEventListener("DOMNodeInserted", yourRemovalFunction);

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
我认为设置超时或设置间隔不可靠。

在jwplayer
onReady
事件上设置侦听器会更好。

jQuery document.ready()也不起作用?@DOK:
$(document)。ready
$(窗口)之前激发。load
。通常情况下,jQuery在DOM完全加载之后,在所有资产完全接收之前激发。这只是一些不同的东西,而且很容易尝试。很有趣。所有主流浏览器都支持这个功能吗?不支持(Firefox尤其不支持),但它们在Chrome中工作,因此应该与Javascript注入器插件一起工作。谢谢你,这是最后一个难题!可能吧,但我在Javascript方面并没有那么先进,而且效果不错,谢谢你,一旦我有时间,我会尝试一下,我不认为setInterval不可靠。因为在某些情况下,您希望在读取DOM之前等待AJAX调用完成DOM。因此,使用setInterval可以跟踪目标节点。如果AJAX调用挂起超过2秒怎么办?