Google chrome extension 在crossrider生成的清单中设置跨源权限

Google chrome extension 在crossrider生成的清单中设置跨源权限,google-chrome-extension,cors,crossrider,Google Chrome Extension,Cors,Crossrider,在chrome扩展中,您可以在manifest.json中设置权限。我假设crossrider在幕后生成了这个文件。如何更改crossrider扩展生成的权限?还是还不可能 我的分机尤其需要访问所有页面上的图像和视频数据。这会因为CORS错误而被拒绝,我相信设置适当的权限会解决我的问题 [编辑] 以下是我的代码的核心: try { //all nodes in the DOM go through this function var parseNode = function(n

在chrome扩展中,您可以在
manifest.json
中设置权限。我假设crossrider在幕后生成了这个文件。如何更改crossrider扩展生成的权限?还是还不可能

我的分机尤其需要访问所有页面上的图像和视频数据。这会因为CORS错误而被拒绝,我相信设置适当的权限会解决我的问题


[编辑]

以下是我的代码的核心:

try {
    //all nodes in the DOM go through this function
    var parseNode = function(node) {

        //only get img and video tags
        var nodeName = node.nodeName.toUpperCase();
        if (["IMG", "VIDEO"].indexOf(nodeName) == -1)
            return;

        //attempt to extract their pixel data
        var canvas = document.createElement("canvas");
        var context = canvas.getContext("2d");
        try {
            console.log(node.src, " ", node.clientWidth, "x", node.clientHeight);
            canvas.width = node.clientWidth; //may be zero if failed CORS
            canvas.height = node.clientHeight;
            context.drawImage(node, 0, 0);
            var dat = context.getImageData(0, 0, canvas.width, canvas.height);
            console.log("Success");
            canvas.remove();
            return dat.pixels;
        }
        catch (e) {
            console.log("Failed ", node, ": ", e);
            canvas.remove();
        }
        return null;
    };

    //parse everything currently loaded
    var everything = document.getElementsByTagName("*");
    for (var i = 0; i < everything.length; i++) {
        parseNode(everything[i]);
    }

    //use a mutation ovserver to parse everything that gets injected later
    var parseMutations = function(mutations) {
        mutations.forEach(function(mutation) {
            if (mutation.addedNodes) {
                for (var i = 0; i < mutation.addedNodes.length; i++) {
                    parseNode(mutation.addedNodes[i]);
                }
            }
        });
    };

    var observer = new MutationObserver(parseMutations);
    observer.observe(document, {
        childList:     true,
        subtree:       true
    });
}
catch (e)
{
    //this has to be here since all browsers are so shit at catching syntax errors in extensions
    //not to mention the crossrider extension won't install properly if there's a typo or missing semicolon. so much pain
    console.log(e, " ", e.stack); //stack is pretty useless with crossrider code injection
}

[编辑]

我已删除try/catch,因此错误可以正确打印。我仍然看到很多错误

Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': the canvas has been tainted by cross-origin data. 
我正在使用此页面测试:

“磨合IFrame”已关闭

试试看{
//DOM中的所有图像和视频节点都通过此函数
var parseNode=函数(节点){
//尝试提取他们的像素数据
var canvas=document.createElement(“canvas”);
var context=canvas.getContext(“2d”);
node.title=“失败”;
log(node.src,“”,node.clientWidth,“x”,node.clientHeight);
canvas.width=Math.max(1,node.clientWidth);//如果CORS失败,则可能为零
canvas.height=Math.max(1,node.clientHeight);
drawImage(节点,0,0);
var dat=context.getImageData(0,0,canvas.width,canvas.height);
canvas.remove();
返回数据像素;
node.title=“成功”;
返回null;
};
//解析当前加载的所有内容
var everything=document.getElementsByTagName(“*”);
for(var i=0;i 

目前,SigRealver平台没有提供修改清单权限的机制,尽管有计划为将来的版本考虑这个问题。 因此,您可以手动尝试在CRX文件中添加权限,但请记住,这可能会妨碍支持扩展的能力


[披露:我是一名Crossrider员工]

感谢您的快速回复!我想我必须弄清楚如何修改每个浏览器的扩展,而不仅仅是chrome。在这种情况下,添加权限是我唯一的选择吗?是的,您必须了解特定于浏览器的要求以及如何添加它们。至于另一种选择,这实际上取决于你如何处理图像/视频。我目前正在使用过滤器来更改图像,因此我不必替换或修改它们。我的主要问题是读取他们的数据以进行内容识别和直方图生成。为了帮助我,我需要一个代码片段和一些步骤来重现您遇到的问题。我添加了一些代码来重现问题。这就是我的
扩展名.js中的全部内容。
Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': the canvas has been tainted by cross-origin data. 
try {
    //all image and video nodes in the DOM go through this function
    var parseNode = function(node) {
        //attempt to extract their pixel data
        var canvas = document.createElement("canvas");
        var context = canvas.getContext("2d");
        node.title = "FAILED";
        console.log(node.src, " ", node.clientWidth, "x", node.clientHeight);
        canvas.width = Math.max(1, node.clientWidth); //may be zero if failed CORS
        canvas.height = Math.max(1, node.clientHeight);
        context.drawImage(node, 0, 0);
        var dat = context.getImageData(0, 0, canvas.width, canvas.height);
        canvas.remove();
        return dat.pixels;
        node.title = "SUCCESS";
        return null;
    };

    //parse everything currently loaded
    var everything = document.getElementsByTagName("*");
    for (var i = 0; i < everything.length; i++) {
        var node = everything[i];
        var nodeName = node.nodeName.toUpperCase();
        if (["IMG", "VIDEO"].indexOf(nodeName) != -1)
            (function(n) {setTimeout(function(){parseNode(n);},1000);})(node);
    }

    //use a mutation ovserver to parse everything that gets injected later
    var parseMutations = function(mutations) {
        mutations.forEach(function(mutation) {
            if (mutation.addedNodes) {
                for (var i = 0; i < mutation.addedNodes.length; i++) {
                    var node = mutation.addedNodes[i];
                    var nodeName = node.nodeName.toUpperCase();
                    if (["IMG", "VIDEO"].indexOf(nodeName) != -1)
                        (function(n) {setTimeout(function(){parseNode(n);},1000);})(node);
                }
            }
        });
    };

    var observer = new MutationObserver(parseMutations);
    observer.observe(document, {
        childList:     true,
        subtree:       true
    });
}
catch (e)
{
    //this has to be here since all browsers are so shit at catching syntax errors in extensions
    console.log(e, " ", e.stack); //stack is pretty useless with crossrider code injection
}