【问题标题】:Detect when a method is being run in javascript (event)检测方法何时在 javascript (event) 中运行
【发布时间】:2012-06-29 05:12:44
【问题描述】:

我希望在运行方法之前将变量注入页面。情况如下

CUSTOM JS CAN GO HERE

my.var = 'cake';
my.function();

我无权直接修改页面,但是页面顶部有一个内容区域,如果需要,我可以添加一些 JS。基本上我需要在 my.function() 运行之前用其他东西覆盖 my.var 变量。有没有办法做到这一点? (该站点运行的是 jQuery 1.4.2。

谢谢 丹

【问题讨论】:

  • 我希望我能检测到 my.function() 何时即将运行,并运行一个匿名函数以在变量运行之前将其设置为我喜欢的。此外,无权将任何文件推送到该站点。我所拥有的只是网站 CMS 中的一个窗口,它允许我在上面的那个区域弹出一些自定义 JS。
  • 如果这些设置在CUSTOM 注入点之上,那么只需重新声明它们。
  • 不幸的是,我要更改的是CUSTOM 区域下方。

标签: javascript variables inject


【解决方案1】:

基本上我需要在 my.function() 运行之前用其他东西覆盖 my.var 变量。有没有办法做到这一点?

var oldfunction = my.function;
my.function = function () {
    my.var = "whatever you want";
    oldfunction.apply(this, arguments);
}

当然,如果mymy.function 没有被您无法在调用my.function 之前直接修改的代码覆盖(就像my.var 一样)。

例如,在以下场景中:

///your code goes here

///code you cannot modify below
var my = {};
my.function = something;
my.var = 'cake';
my.function();

你想要的东西是不可能的(除非你能够重新定义 something 或以同样的方式在其中的东西)。

基本上,在这种情况下,你唯一能做的就是写(假设somethingfunction () { alert(my.var) }

var oldalert = window.alert;
window.alert = function (message) {
    oldalert(message === 'cake' ? 'whatever you want' : message);
}

嗯,你有一个想法。

my.var = 'cake';my.function(); 之间注入一些代码,另一方面,不可能。粗略地说,您可以在两个选项之间进行选择,您的代码是在my.var = 'cake'; 之前执行还是在my.function(); 之后执行。在my.var = 'cake'; 之后但在my.function(); 之前执行您的代码是不可能的(如果我们说的是生产环境;当然,如果您需要修改my.var 以进行调试,您可以使用调试器手动执行任何操作) .

【讨论】:

  • 这就是我的想法,但我不确定该函数是在自定义脚本区域上方还是下方声明的。
  • 我相应地修改了我的答案。基本上,你唯一的选择就是重新定义一些东西。打破执行顺序是不可能的。在 JS 中,可以完全确定 nothingmy.var = 'cake';my.function(); 之间发生。
  • 不是impossible。不过好像有点不对。
  • 是的,您的解决方案看起来非常棒。然而,我刚刚发现CUSTOM 区域实际上位于调用 my.function() 的位置下方,所以它看起来像是被塞满了......不过感谢您的帮助。如果情况如上,那很可能是最好的解决方案。不幸的是,JS 也是同步运行的(不是在文档加载时)
  • @JaredFarrish 我不明白你的例子应该展示什么。 OP 说页面上有a; b; 块,他们无法控制这个块的内容。因此,不可能在a; 调用之后但在b; 调用之前注入要运行的代码(不考虑更改ab 和调试器的可能性)。
猜你喜欢
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多