用户脚本加载但不会运行

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

我要求

blackbox.ai
生成一个用户脚本,为
Array.prototype.findLast
创建一个 polyfill。
此方法是在现代 JavaScript 中定义的,但在较旧的浏览器中可能会丢失。
我用旧浏览器进行了测试。
我可以看到
console.log
消息,这意味着脚本已执行。
然而,当我在控制台中执行
Array.prototype.findLast
时,它显示
undefined

这是用户脚本:

// ==UserScript==
// @name         Array.prototype.findLast Polyfill
// @author       ychaouche
// @namespace    ychaouche.scripts
// @version      2024-11-04
// @description  Add findLast method to Array.prototype if it doesn't exist
// @match        *://*/*
// ==/UserScript==

(function() {
    'use strict';

    if (!Array.prototype.findLast) {
        Array.prototype.findLast = function(callback, thisArg) {
            if (this == null) {
                throw new TypeError('Array.prototype.findLast called on null or undefined');
            }
            if (typeof callback !== 'function') {
                throw new TypeError('callback must be a function');
            }

            const list = Object(this);
            const length = list.length >>> 0;

            for (let i = length - 1; i >= 0; i--) {
                if (i in list) {
                    const element = list[i];
                    if (callback.call(thisArg, element, i, list)) {
                        return element;
                    }
                }
            }
            return undefined;
        };

        console.log('Array.prototype.findLast polyfill has been added.');
    } else {
        console.log('Array.prototype.findLast already exists.');
    }

    // Optional: Test the polyfill
    var testArray = [1, 2, 3, 4, 5];
    var lastEven = testArray.findLast(num => num % 2 === 0);
    console.log('Last even number:', lastEven);
})();

这是显示

console.log
消息的控制台跟踪,以及页面加载后我尝试自己访问
undefined
时的
Array.prototype.findLast

Array.prototype.findLast polyfill has been added. Array.prototype.findLast-Polyfill.user.js:37:17
Last even number: 4

>> Array.prototype.findLast
undefined
tampermonkey
1个回答
0
投票

问题不在于脚本本身,
这是我访问的网站的 CSP 政策。
该脚本在另一个网站上运行良好。
我用的是火狐浏览器,
并且您似乎无法在 Firefox 中禁用特定网站或选项卡的 CSP。

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