Chrome 扩展重置重写功能
Chrome extension reset overridden function
问题:
我正在开发的一个 chrome 扩展程序需要位置欺骗程序。它有效,但我不能 'unset' 它。
我目前拥有的:
让我们检查一下相关代码。这是内容脚本的一部分。
let cachedGeoLocFunc = navigator.geolocation.getCurrentPosition
let geoSpoofCode = conf => `
(function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition = function(success) { return success(${conf}); }
} else {
console.error('Geolocation is not supported in this browser');
}
})()
`
browser.runtime
.sendMessage({ type: 'request-spoofed-coords' })
.then(curCoords => {
//json from state, contains current spoofed locale
if (curCoords) {
let script = document.createElement('script')
script.textContent = geoSpoofCode(curCoords)
document.documentElement.appendChild(script)
script.remove()
} else {
//revert to default behavior
let unSetScript = document.createElement('script')
unSetScript.textContent = `
(function() {
navigator.geolocation.getCurrentPosition = ${cachedGeoLocFunc};
})()`
document.documentElement.appendChild(unSetScript)
unSetScript.remove()
}
})
如您所见,我正在覆盖 chrome 本机函数并提供我自己的值。这适用于欺骗位置。
意外行为:
从概念上讲,我认为这会奏效。我正在 缓存 本机 chrome 函数,以便我稍后可以重置它(请参阅其他)。实际上,当此内容脚本被注入页面时,我会收到此错误。
Uncaught SyntaxError: Unexpected identifier
它在这里中断(根据 chrome 检查员)
Screen shot of error
我的问题!
因此,它只是注入 [本地代码] 而不是实际函数(至少它看起来是这样)。
有谁知道我如何取消覆盖这个功能。有没有一种优雅的方法可以做到这一点?
chrome 中的缓存如何工作,有没有办法查看此 本机代码
无论如何,我们将不胜感激。希望大家度过愉快的一天!
好的,正如@wOxxOm 指出的那样,这是一个误解。请参考他们的回复。内容脚本不影响或真正 'override' api 功能。
问题:
我正在开发的一个 chrome 扩展程序需要位置欺骗程序。它有效,但我不能 'unset' 它。
我目前拥有的:
让我们检查一下相关代码。这是内容脚本的一部分。
let cachedGeoLocFunc = navigator.geolocation.getCurrentPosition
let geoSpoofCode = conf => `
(function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition = function(success) { return success(${conf}); }
} else {
console.error('Geolocation is not supported in this browser');
}
})()
`
browser.runtime
.sendMessage({ type: 'request-spoofed-coords' })
.then(curCoords => {
//json from state, contains current spoofed locale
if (curCoords) {
let script = document.createElement('script')
script.textContent = geoSpoofCode(curCoords)
document.documentElement.appendChild(script)
script.remove()
} else {
//revert to default behavior
let unSetScript = document.createElement('script')
unSetScript.textContent = `
(function() {
navigator.geolocation.getCurrentPosition = ${cachedGeoLocFunc};
})()`
document.documentElement.appendChild(unSetScript)
unSetScript.remove()
}
})
如您所见,我正在覆盖 chrome 本机函数并提供我自己的值。这适用于欺骗位置。
意外行为:
从概念上讲,我认为这会奏效。我正在 缓存 本机 chrome 函数,以便我稍后可以重置它(请参阅其他)。实际上,当此内容脚本被注入页面时,我会收到此错误。
Uncaught SyntaxError: Unexpected identifier
它在这里中断(根据 chrome 检查员)
Screen shot of error
我的问题!
因此,它只是注入 [本地代码] 而不是实际函数(至少它看起来是这样)。
有谁知道我如何取消覆盖这个功能。有没有一种优雅的方法可以做到这一点?
chrome 中的缓存如何工作,有没有办法查看此 本机代码
无论如何,我们将不胜感激。希望大家度过愉快的一天!
好的,正如@wOxxOm 指出的那样,这是一个误解。请参考他们的回复。内容脚本不影响或真正 'override' api 功能。