代码之家  ›  专栏  ›  技术社区  ›  sashoalm Yaser Kalali

如果字符串包含某个子字符串,则任何字符串赋值上的断点

  •  10
  • sashoalm Yaser Kalali  · 技术社区  · 7 年前

    例如,我想对包含 &ctoken= 已构造。这是用复杂的JavaScript完成的,目的是混淆它。

    如果我能告诉JS VM监视所有字符串变量,并在某个子字符串出现时中断 任何 变量,这将帮助我很多。

    2 回复  |  直到 7 年前
        1
  •  7
  •   Robin F.    7 年前

    在我开始之前——据我所知,这是不可能的。

    您需要的(甚至在创建调试功能之前)是已经装箱到的原始字符串类型 String 一串 然后已经代理。

    只有

    const s = "hi"
    

    还不是的实例 一串 -内置的本机对象,由ECMAScript实现提供给您的作用域,但它是一个原始类型。

    const s = "hi"
    const x = new String("hi")
    

    与数据对象的内存引用相同。但后者当然会受到 一串 . http://bespin.cz/~ondras/html/classv8_1_1String.html

    在原始类型上,即使我们想添加订阅者,也无法添加订阅者。

    s.charAt(i)
    

    will autobox公司 s 到它的包装 一串 .

    一串 这对表现一点也不好。

    不仅如此,还有 一串 它本身必须允许我们添加订阅者,因此已经被代理了。

    在JS中,这样的代理看起来是这样的(为了更容易理解我所说的代理的意思):

    var proxiedString = new Proxy(String, {
      defineProperty(target, propKey, propDesc) {
        console.log('defined a new string')
      },
      set(obj, prop, value) {
        console.log('set a new value to a string')
      }
    });
    
    proxiedString.x = 'newPropValue'
    

    再说一遍,我想——这对性能不太好。

        2
  •  -1
  •   Alex Nikulin    7 年前
    1. 您可以在右侧的浏览器devTools中使用条件断点 单击菜单。
    2. 如果你能在页面的某个地方写一个js,你 可以这样做:

    .

        if(window.location.pathname.indexOf("&ctoken=") > -1){ 
           debugger;// browser will put breakpoint automaticaly here, if condition  is trully.
           console.dir(window.location);
        }