提问人:Lee 提问时间:3/26/2023 最后编辑:Lee 更新时间:3/26/2023 访问量:56
挂钩 javascript 对象文字构造函数以修改在无法访问的上下文中创建的对象
Hooking javascript object literal constructors to modify objects created in inaccessible contexts
问:
我正在尝试修改代码中存在的一个对象,我无法控制且无法直接更改。理想情况下,我想从书签中执行此操作,但用户脚本的额外权限也是一个可用的上下文。
我尝试钩接的代码如下所示:
(() => {
var target = { nestedsubobject: { foo: 'value' } };
// does some stuff with target
})();
我想截获分配给 的对象文字并修改 的值,然后再 IIFE 进一步使用它。target
foo
到目前为止,我尝试过的所有方法都不起作用:
- 原型似乎与此问题无关。虽然我可以覆盖全局对象原型,但这使我无法实际侦听使用该原型创建的对象。
- 使用 on 定义 or with or 会导致在构造目标对象时抛出客户端代码。仅使用配置会导致该属性存在于新对象中,因此在原型对象中被忽略。
Object.defineProperty
Object.prototype
nestedsubobject
foo
writable: false
get()
TypeError: can't redefine non-configurable property (...)
value
- 使用 on 定义 or with or 会导致在构造目标对象时抛出客户端代码。仅使用配置会导致该属性存在于新对象中,因此在原型对象中被忽略。
- 构造函数使用对象文本进行绕过。虽然我可以重写全局对象构造函数(如重写 JavaScript 全局本机 Object() 构造函数),但文字语法似乎不使用该构造函数。
此外,我无法直接更改代码(例如,拦截和重写它的网络请求),因为我预计它将来可能会被混淆。我想直接挂钩对象创建,以使我的用户脚本更加持久。
这是在浏览器上下文中运行的。
答: 暂无答案
评论