设置 cookie 时中断 JavaScript 执行

问题描述 投票:0回答:5

是否可以在设置 cookie 时始终中断浏览器开发人员工具中的 javascript 执行(无需显式设置 JS 断点)?

document.cookie = '...';
javascript cookies browser google-chrome-devtools breakpoints
5个回答
36
投票

在 html → head 块的开头添加此代码片段效果很好:

<script type="text/javascript">
    function debugAccess(obj, prop, debugGet){
        var origValue = obj[prop];
        Object.defineProperty(obj, prop, {
            get: function () {
                if ( debugGet )
                    debugger;
                return origValue;
            },
            set: function(val) {
                debugger;
                return origValue = val;
            }
        });
    };
    debugAccess(document, 'cookie');
</script>

请参阅此 Angular 大学页面了解更多信息。


14
投票

这应该可以工作(在控制台中运行它):

origDescriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie');
Object.defineProperty(document, 'cookie', {
  get() {
    return origDescriptor.get.call(this);
  },
  set(value) {
    debugger;
    return origDescriptor.set.call(this, value);
  },
  enumerable: true,
  configurable: true
});

0
投票

比覆盖整个

HTMLDocument.prototype
cookie
属性更好的方法是使用
Reflect
Proxy
。这样,您不必为
cookie
属性的每个方法提供重写,而只需提供特定的方法(即,当 cookie 为
set
时)。

Reflect.setPrototypeOf(document, new Proxy(Reflect.getPrototypeOf(document), {
  set(target, key, value, thisArg) {
    if (key === 'cookie') {
      // when document.cookie is assigned a value, we end up here.
      debugger;
    }

    // flow through to the original object assignment
    return Reflect.set(...arguments)
  }
}));

-3
投票

在 Chrome 开发工具中,您可以右键单击应用程序 cookie 中的某个 cookie,然后选择“显示带有此 cookie 的请求”

所以这不是拦截,但如果您的目标是识别 cookie 来自哪里,那么这是一个好方法。


-5
投票

尝试在 If 语句中设置它。

if(document.cookie.indexOf('...') >= 0){
  debugger;
}

注意:使用 Firefox 时,您的控制台必须打开。在 Chrome 中,情况并非如此。

© www.soinside.com 2019 - 2024. All rights reserved.