L oop получение остановки и выдача ошибки «SecurityError: операция небезопасна». - PullRequest
0 голосов
/ 13 марта 2020

В приведенном ниже коде в функции blockk () я пытаюсь выбрать все изображения на сайте по document.getElementsByTagName ('img'). Моя проблема в том, что для l oop в функции blockk () не выбираются все изображения на веб-сайте, а выбирается только некоторое количество начальных изображений, а l oop останавливаются после этого.

Строка в моем коде что вызывает проблему: const rightSizeImageData = inferenceCtx.getImageData(0, 0, 64, 64); Если я удаляю этот код и другой код, связанный с этой строкой, и запускаю его, тогда мой код может выбрать все изображения на веб-странице. Можете ли вы сказать мне, почему это может происходить?

Я новичок в javascript и пытаюсь реализовать его как расширение firefox. Пожалуйста, помогите мне в этой проблеме

console.log('STARTING UP')

const MODEL_PATH = 'mdl/model.json'
const IMAGE_SIZE = 64;

let model;
async function model_startup() 
{

    console.log('Launching TF.js!');
    tf.ENV.set('WEBGL_PACK',false);
    await tf.ready();
    console.log('TensorflowJS backend is: '+tf.getBackend());
    let url = browser.runtime.getURL(MODEL_PATH);
    console.log('Loading model... '+url);

    try
    {
        model = await tf.loadLayersModel(url);
    }
    catch(e)
    {
        console.log('Failed to load model! '+e);
    }
    console.log('Model: ' + model);

    console.log('Warming up...');
    let dummy_data = tf.zeros([1, IMAGE_SIZE, IMAGE_SIZE, 3]);
    // dummy_data.print();  
    let warmup_result = model.predict(dummy_data);


    console.log("finding type : $$$$$$$$ " + typeof warmup_result)
    warmup_result.print();
    warmup_result.dispose();
    console.log('Ready to go!');
    // blockk();
};
model_startup().then(blockk);

function blockk() {
        const x = document.getElementsByTagName('img');
        console.log("wn ############################## " + x.length);

        let inferenceCanvas = document.createElement('canvas');
        inferenceCanvas.width = 64;
        inferenceCanvas.height = 64;
        let inferenceCtx = inferenceCanvas.getContext('2d', { alpha: false});
        inferenceCtx.imageSmoothingEnabled = true;

        for(var i = 0; i < x.length; i++)
        {
            try
            {
              console.log('pixel kmvsl lsvn');  

              let img = x[i];

              inferenceCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, 64, 64);
              const rightSizeImageData = inferenceCtx.getImageData(0, 0, 64, 64); //write promise. It may work.

              const rightSizeImageDataTF = tf.browser.fromPixels(rightSizeImageData);
              const floatImg = rightSizeImageDataTF.toFloat();
              console.log('predicting...');
              let scaled = floatImg.div(tf.scalar(255));
              let batched = tf.stack([scaled]);

              let result = model.predict(batched);
              const val = result.dataSync()[0];
              console.log(val);

              if (val > 0.4) 
              {

                  console.log("blocking" + i);  
                  let h = img.height
                  let w = img.width
                  pth = img.src
                  x[i].setAttribute("src", "https://indianonlineseller.com/wp-content/uploads/2017/05/blocked-listing.png");


                  x[i].setAttribute("data-src", "https://indianonlineseller.com/wp-content/uploads/2017/05/blocked-listing.png");
                  x[i].height = h;
                  x[i].width = w;

                  console.log('blocked');

               }
               console.log("co @@@@@@@@@@@@@@@@@@@@@@@@@@@ " + x.length)
            }
            catch(e)
            {
              console.log('Failed to select ' + e); 
            }
        }
};
...