在定义之前更改油脂单元功能的onclick

时间:2016-12-22 06:00:05

标签: javascript jquery ajax greasemonkey tampermonkey

我将描述我的问题,希望有人可以提供解决方案。

我正在向现有页面添加GreaseMonkey脚本,该页面使用ajax加载带有onclick的元素:

onclick="getProperty('http:/...')"

我搜索了一种方法来覆盖他们的getProperty,这本身很难,因为我无法知道在通过ajax到达之前这个onclick会有什么对象。 我无法绑定自己的点击并取消绑定前一个点击,因为当内容是动态时,没有触发此类功能。我尝试添加我的点击并阻止前一个被调用,这不起作用。 我正在使用的选择器如下所示:

a[onclick^='getProperty']

我发现的是一个人为这个确切的问题写的方法,叫做waitForKeyElements。我希望这里有人已经熟悉它。 它的作用是检查ajax是否将与选择器匹配的元素添加到页面中,如果是,则运行一个函数。

这个方法让我解决方法绑定我的函数来覆盖它们:

waitForKeyElements("a[onclick^='getProperty']", updateToNewGetProperty);

function updateToNewGetProperty(ajaxLinks){        
        ajaxLinks.each(function(){
            var oldOnclick = $(this).attr("onclick");
            var UrlStartPos = oldOnclick.indexOf('\'') + 1;
            var UrlEndPos = oldOnclick.indexOf('\'',UrlStartPos);
            var Url = oldOnclick.substring(UrlStartPos,UrlEndPos);

            $(this).attr("onclick", ""); // unbind
            $(this).click(function() { // bind mine
              myGetProperty(Url);
              return false;
              });
      });
  }

这是有效的,它取消绑定以前的javascript onclick并设置jquery点击。

然而,我发现他们的代码的另一部分抓住了onclick中的URL值,所以我不能使用jquery click bind,因为它会使onclick为空。

我不得不回到:

$(this).attr("onclick",$(this).attr("onclick").replace('getProperty', 'myGetProperty'));

这会返回单击链接时未定义的函数,我相信因为原始页面在完全加载了greasemonkey之前加载了ajax内容。在我的函数注册之前触发waitForKeyElements。

非常感谢任何帮助/建议

0 个答案:

没有答案