0

我有以下问题:在客户的主页上,导航栏是由 javascript 加载的,但我需要更改一些 URL。如果我只是在 $(document).ready() 上启动我的脚本,它会在客户脚本之前运行并且没有任何效果。我只能对我的函数使用 setTimeout 来等到另一个脚本准备好,但这根本不好或不安全。我无法更改网站上的任何内容,只能添加一个 javascript - 有没有办法在另一个之后对其进行计时?

4

4 回答 4

1

您可以使用重复的 setTimeout,以检查菜单是否可访问。

function check_menu(){
    if(document.getElementById('my_menu')==null){
        setTimeout('check_menu()',500);
    } else {
        //do some stuff
    }
}
于 2012-05-16T15:48:38.263 回答
1

Yes, add your script at the bottom of the <body /> tag to ensure it does not run until all other scripts have run. This will only work however if your customer is loading the nav links synchronously.

If the nav is being loaded asynchronously, use JS's setInterval to repeatedly check the contents of the nav for links. When you determine the links have been added, cancel your interval check and call your script's logic entry point.

Cheers

于 2012-05-16T15:57:36.357 回答
1

如果您有关于菜单的信息,例如 id 或类,请onLoad()在元素上使用 jQuery 方法。例如,如果代码是异步加载的,并且您将 onload 添加到内容完成后应该触发的最后一个元素之一。

$.post('AsyncCodeLoad.php', function(data) {
    $('#lastElementToLoad').onLoad(RunMyFunction);
});

或者,如果您没有机会将代码插入异步加载,只需添加到底部</body>

    $('#lastElementToLoad').onLoad(RunMyFunction);

只是一个想法。

于 2012-05-16T15:55:46.300 回答
0

小提琴:http: //jsfiddle.net/iambriansreed/xSzjA/

JavaScript

var
menu_fix = function(){
    var menu = $('#menu');
    if(menu.length == 0) return;
    clearInterval(menu_fix_int);
    $('a', menu).text('Google Search').attr('href','http://google.com');        
},
menu_fix_int = setInterval(menu_fix, 100);

HTML

<div id="menu"><a href="http://bing.com">Bing Search</a></div>​
于 2012-05-16T16:01:19.900 回答