gpt4 book ai didi

javascript - 覆盖窗口上的函数

转载 作者:行者123 更新时间:2023-12-02 22:26:27 25 4
gpt4 key购买 nike

我的理解是,如果您覆盖了窗口对象上的函数,它将在该 session 期间永远被覆盖。

但是,我最近尝试覆盖 window.navigator.geolocation.watchPosition 但发现其他源的 watchPosition 函数没有变化。

这是来源列表

  1. 主网站包
  2. 网站上的扩展
  3. Google Chrome 开发工具内部的代码段

尽管位于同一窗口内,但它们在 window.navigator.geolocation.watchPosition 上都有不同的读数。

示例代码

window.navigator.geolocation.watchPosition = function(success, error, options){
success({ coords: {
latitude: 15.0,
longitude: 15.0,
}, timestamp: Date.now() });
}

如果您更改变量,所有三个来源都会列出不同的纬度/经度。

有人可以向我解释一下是否可以覆盖所有其他源的窗口对象上的函数吗?或者我已经做得对了,但可能在其他地方搞砸了?

非常感谢任何帮助。

最佳答案

内容脚本有自己的隔离环境。这意味着它们不共享函数、变量等。这意味着实际页面无法观察到内容脚本中对象的更改。这就是为什么您的脚本与页面和控制台中包含的扩展和代码存在差异。请注意,尽管您可以更改开发工具控制台以在扩展环境中工作,但只需从选项卡的下拉菜单中选择它即可。

但是,内容脚本和页面都可以访问同一页面 DOM。因此,两者都可以向页面添加/删除元素。这允许内容脚本将脚本添加到页面,该脚本在与页面上的常规脚本相同的环境中运行。

//inside content script
let s=document.createElement('script')
s.textContent = 'your code here';
//or use getURL() to get a usable url to set
//src to
s.src = chrome.extension.getURL('scriptforpage.js')
document.head.appendChild(s)

关于javascript - 覆盖窗口上的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59050867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com