Ekstensi Chrome: Konteks ekstensi tidak valid saat mendapatkan URL

Aug 21 2020

Saya mengambil beberapa gambar dari salah satu folder ekstensi chrome saya ke DOM situs web dan setiap kali saya memuat ulang ekstensi, saya mendapatkan kesalahan 'Konteks Ekstensi Tidak Divalidasi'. Hal yang sama terjadi ketika saya melakukan 'chrome.storage.local.set'.

Melakukan penelitian saya telah menyadari bahwa kesalahan ini ada hubungannya dengan fakta yang dijelaskan dengan baik pada jawaban ini tetapi karena saya tidak mengirim pesan antara skrip konten saya dan background.js saya bertanya-tanya mengapa ini terjadi.

Ini adalah bagian dari skrip saya (disuntikkan melalui chrome.tabs.executeScript di popup.js) di mana saya mendapatkan kesalahan, pada dasarnya saya menyuntikkan gambar dari salah satu folder ekstensi saya ke DOM situs web:

  for (let k = 0; k < incomingChatTags.length; k++) {
    let normalHolderTag = $(incomingChatTags[k]).text().toLowerCase(); switch (normalHolderTag) { case "vip": $(incomingChatTags[k]).addClass("ce-vip");
        priorityVal += 300;
        break;
      case "rg":
        $(incomingChatTags[k]).addClass("ce-rg"); priorityVal += 240; break; case "accountclosure": $(incomingChatTags[k]).addClass("ce-accountclosure");
        priorityVal += 200;
        break;
      case "21com":
        let logo21 = chrome.extension.getURL("/images/21_thumb.png");
        $(incomingChatTags[k]).html('<img src="' + logo21 + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
        break;
      case "caxino":
        //the console shows the error here and not before....¿why? 
        let logoCaxino = chrome.extension.getURL(
          "/images/caxino_thumb.png"
        );
        $(incomingChatTags[k]).html('<img src="' + logoCaxino + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
        break;
      case "justspin":
        let logoJustSpin = chrome.extension.getURL(
          "/images/wildz_thumb.png"
        );
        $(incomingChatTags[k]).html('<img src="' + logoJustSpin + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
        break;
      case "neonvegas":
        let logoNeonVegas = chrome.extension.getURL(
          "/images/neonVegas_thumb.jpg"
        );
        $(incomingChatTags[k]).html('<img src="' + logoNeonVegas + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
        break;
      case "nitrocasino":
        let logoNitroCasino = chrome.extension.getURL(
          "/images/nitroCasino_thumb.jpg"
        );
        $(incomingChatTags[k]).html( '<img src="' + logoNitroCasino + '" />' ); $(incomingChatTags[k]).addClass("ce-tag-logo");
        break;
      case "snabbis":
        let logoSnabbis = chrome.extension.getURL(
          "/images/snabbis_thumb.png"
        );
        $(incomingChatTags[k]).html('<img src="' + logoSnabbis + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
        break;
      case "sb.bet":
        let logoSB = chrome.extension.getURL("/images/sb_thumb.png");
        $(incomingChatTags[k]).html('<img src="' + logoSB + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
        break;
      case "wildz":
        let logoWildz = chrome.extension.getURL("/images/wildz_thumb.png");
        $(incomingChatTags[k]).html('<img src="' + logoWildz + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
        break;
      case "wishmaker":
        let logoWishMaker = chrome.extension.getURL(
          "/images/wishmaker_thumb.png"
        );
        $(incomingChatTags[k]).html('<img src="' + logoWishMaker + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
        break;
    }
    $(incomingChat).attr("data-priority", priorityVal); $(incomingChat).find(".numbers_cell").text(priorityVal);
  }

Jawaban

2 Lowtrux Sep 04 2020 at 09:49

Saya ingin menjelaskan apa yang saya lakukan untuk menjaga ini:

Pada dasarnya saya membungkus semua yang membuat kesalahan ini dengan:

typeof chrome.app.isInstalled !== "undefined"”

Saya masih mencoba mencari tahu mengapa ini berhasil, sejujurnya. Saya memahami bahwa setiap kali saya memperbarui ekstensi, skrip konten masih disuntikkan di situs web (dalam kasus saya, mengambil elemen dom, menyimpan data ke penyimpanan lokal chrome, dll) tetapi saya tidak mengerti mengapa pernyataan itu menghindari hal ini terjadi sejak ekstensi masih terpasang di Browser saya, saya hanya memperbarui file.

Jika seseorang dapat memberikan penjelasan yang lebih mendalam tentang mengapa ini berhasil untuk saya, tolong beri penerangan di sini.

1 Ghazi Oct 17 2020 at 22:09

Setelah memuat ulang ekstensi, skrip konten lama Anda akan terus berada di halaman yang dibuka sampai Anda menyegarkannya. Namun konteks mereka sehubungan dengan ekstensi Chrome akan hilang.

Hanya satu liner untuk menghindari situasi tersebut:

if(chrome.runtime.id == undefined) return;