9

我试图覆盖 Bigcartel 的 JS 函数。我无权访问 JS 文件。

原文是:

updateCart: function(cart) {
    $('aside .cart .count, .main header .cart').htmlHighlight(cart.item_count);
    return $('aside .cart .total').htmlHighlight(Format.money(cart.total, true, true));
  }, 

我正在尝试将其更改为:

updateCart: function(cart) {
  $('aside .cart .count, .sml .cart, .big .cart .count').htmlHighlight(cart.item_count);
  return $('aside .cart .total').htmlHighlight(Format.money(cart.total, true, true));
},

我知道其他人也问过类似的问题,但在理解如何实现 JS 方面我是一个完全的菜鸟(我只知道如何通过反复试验来调整)

如果有人可以通过给我答案来帮助我,那就太好了。

谢谢,

周三-


编辑 [10.10.13 :: 21:24hr]

澄清一下,我没有直接访问原始 JS 文件的权限。我只能通过chrome查看。我只能访问 html 文件。这是一个大卡特尔主题编辑。

这是使用 chrome 复制 JS 的链接。第 216 行是代码,如果这有帮助:http: //jsfiddle.net/w9GTJ/

4

2 回答 2

14

编辑:你很幸运。从贴出的代码中,您可以看到 updateCart 方法是在 window.Store 全局对象上导出的。解决方案是在加载原始脚本后添加此代码:

window.Store.updateCart = function(cart) {
  $('aside .cart .count, .sml .cart, .big .cart .count').htmlHighlight(cart.item_count);
  return $('aside .cart .total').htmlHighlight(Format.money(cart.total, true, true));
};

一般情况说明:

网页中加载的所有脚本都在同一个全局范围内运行,因此覆盖变量就像在之后插入脚本一样简单:

<script>
var x = 5; // original script
</script>
<script>
x = 2; // your inserted script
</script>

从外观上看,您的函数被定义为对象的属性:

var x = {
   updateCart : function(cart) {
     // stuff
   }
}

因此,要覆盖它,您需要执行以下操作:

x.updateCart = function(cart) {
  // your code
}

最后,如果函数在原始代码中是私有的,则在一种情况下您根本无法覆盖它:

function() {
   var x = {
      updateCart: function(){}
   }
}()

// No way to access x.updateCart here
于 2013-10-10T16:47:10.893 回答
0

假设您能够找到并访问相应的 js 对象:

[theTargetObject].prototype.updateCart= function(cart) {
          $('aside .cart .count, .sml .cart, .big .cart .count').htmlHighlight(cart.item_count);
          return $('aside .cart .total').htmlHighlight(Format.money(cart.total, true, true));
}
于 2013-10-10T16:45:36.693 回答