我对 JS 相当陌生,并且创建了一个 chrome 扩展,其中使用了 Array.filter 函数,但是对于某些网站,网站所有者创建了自己的 Array.filter 函数,其行为与内置函数不同。有什么方法可以覆盖这个用户定义的函数并获取该函数的 native 行为。任何帮助将不胜感激。
最佳答案
要保存原始的 Array#filter 方法,只需将其保存到变量中,然后在需要时使用 call()
来使用它。 :
//Saving the original method
var ArrayFilter = Array.prototype.filter;
//Then whenever needing to use it, call it by using call()
var someArray = [1,2,3];
var filteredArray = ArrayFilter.call(someArray,function(){ /* your filter callback */ });
现在您需要在创建修改后的 filter()
方法的脚本之前运行此命令。您必须通过更改内容脚本的加载位置来完成此操作,以便它可以加载其他代码。这是通过设置run_at来完成的。在 list 中设置:
list :
"content_scripts": [
{
"matches": ["http://*.example.com/*"],
"run_at": "document_start",
"js": ["contentScript.js"]
}
],
contentScript.js
//injecting the script into the page
//or however you are currently doing it
var yourScript = document.createElement('script');
document.head.appendChild(yourScript);
yourScript.textContent = "/* your js code */";
关于javascript - 使用 chrome 扩展覆盖用户定义的函数以使用 native 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53386921/