處理遠端代管程式碼違規問題

遠端代管的程式碼 (RHC) 是指 Chrome 線上應用程式商店呼叫的內容 是在瀏覽器載入非 寫入自己的檔案像是 JavaScript 和 WASM不包括 例如 JSON 或 CSS

為什麼不再允許 RHC 了?

透過 Manifest V3 擴充功能,現在必須將內部使用的所有程式碼封裝在一起 。過去,您可透過動態方式 任何網址。

我被告知擴充功能有 RHC。為什麼會發生這種情況?

如果你的擴充功能在審查期間遭拒,並顯示 Blue Argon 錯誤,請 審查人員認為你的擴充功能是使用遠端代管的程式碼。這是 這通常是擴充功能嘗試新增指令碼標記時,所產生的結果 資源 (例如來自開放網路,而非 擴充功能),或「擷取」直接執行的資源。

如何判斷 RHC

知道要找什麼後,就不容易發現 RHC 。首先 檢查字串中是否有「http://」或「https://」資源數量如果您有 若是違反 RHC 政策,您或許可以找到相關位置。如果 您有完整的建構系統,或使用 npm 或其他第三提供的依附元件 方來源時,請務必使用搜尋「編譯」版本的程式碼。 因為這是商店要評估的內容如果還是無法 找出問題,下一步是與 One Stop 支援小組聯絡。他們 就能列出具體的違規情況,以及取得 應用程式。

程式庫要求程式碼時的處理方式

無論程式碼來源為何,都不得含有 RHC。這個 包含您不編寫的程式碼,但只是作為在 專案。部分開發人員使用 Firebase 時,會發生這個問題 程式碼,以便用於 Firebase 驗證。雖然這是 第一方 (即 Google 擁有) 程式庫,RHC 則沒有例外。您需要具備 設定程式碼,移除 RHC 或將詩詞更新為 開頭的程式碼如果問題不是「你的」程式碼 載入 RHC ,而是您正在使用的程式庫 請與圖書館作者聯絡請告知他們上述情況 並要求變通方法或程式碼來將其移除

無法等待程式庫更新時該怎麼辦?

部分圖書館會在收到通知後立即發布更新,但 或時間處理問題根據「什麼」 就可能需要等待這些事件 以便解除封鎖並完成審查作業。建立機器學習模型時 可讓您快速完成備份與執行作業。

稽核程式碼

您是否確定需要造成要求的程式碼?如果可以 或刪除造成該圖片的程式庫,再將其刪除 這項工作就完成了

或者,有其他程式庫提供相同功能嗎?嘗試 檢查 npmjs.com、GitHub 或其他網站,瞭解是否有其他選項

樹木搖晃

如果實際上並未使用導致 RHC 違規的程式碼,這可能是 都能自動刪除現代化建構工具,例如 webpackRollupVite (僅列舉幾個項目) 有一項功能 名為「樹動」。在建構系統中啟用後,搖動樹 應移除所有未使用的程式碼路徑。這意味著 且速度更快、速度更快!這很重要 請注意,並非所有程式庫都能搖擺,但很多程式庫都是如此。只有部分通知 與 Rollup 和 Vite 等工具預設啟用樹狀結構Webpack 必須加以設定,才能啟用。如果您並未使用建構 新增到擴充功能中,但「確實」使用程式庫,那麼 非常鼓勵在工作流程中加入建構工具建構 工具可協助您編寫更安全、更可靠且易於維護的專案。

實作樹狀圖做法的具體細節因專案而異。 以一個簡單的例子來說 Rollup 為例 編譯專案程式碼舉例來說,如果您的檔案只會登入 Firebase Auth,稱為 main.js:

import { GoogleAuthProvider, initializeAuth } from "firebase/auth";

chrome.identity.getAuthToken({ 'interactive': true }, async (token) => {
  const credential = GoogleAuthProvider.credential(null, token);
  try {
    const app = initializeApp({ ... });
    const auth = initializeAuth(app, { popupRedirectResolver: undefined, persistence: indexDBLocalPersistence });
    const { user } = await auth.signInWithCredential(credential)
    console.log(user)
  } catch (e) {
    console.error(error);
  }
});

你只需告知 Rollup 輸入檔案,這個外掛程式 載入節點檔案 @rollup/plugin-node-resolve,以及輸出的名稱 現有的檔案

npx rollup --input main.js --plugin '@rollup/plugin-node-resolve' --file compiled.js

在終端機視窗中執行該指令後,您會收到產生的版本 的 main.js 檔案,全部編譯成名為 compiled.js 的單一檔案。

「綜覽」雖然很簡單,但您也可以「非常」設定。您可以新增所有種類 歡迎參閱相關說明文件,瞭解如何運用複雜的邏輯和設定。 新增這類建構工具會產生更小、更有效率的程式碼 在這個情況下,請修正遠端代管的程式碼問題。

自動編輯檔案

遠端託管的程式碼越來越常用於輸入您的程式碼集 做為您所納入程式庫的附屬元件假設「X」程式庫要求以下權限: 從 CDN 到 import 程式庫 Y,您就需要更新程式庫,才能 並從本機來源載入採用現代化的建構系統 外掛程式,可以擷取遠端參照,並直接內嵌至程式碼中。

也就是說,指定程式碼看起來會像這樣:

import moment from "https://unpkg.com/moment@2.29.4/moment.js"
console.log(moment())

您可以製作小型匯總外掛程式。

import { existsSync } from 'fs';
import fetch from 'node-fetch';

export default {
  plugins: [{
    load: async function transform(id, options, outputOptions) {
      // this code runs over all of out javascript, so we check every import
      // to see if it resolves as a local file, if that fails, we grab it from
      // the network using fetch, and return the contents of that file directly inline
      if (!existsSync(id)) {
        const response = await fetch(id);
        const code = await response.text();

        return code
      }
      return null
    }
  }]
};

使用新的外掛程式執行建構作業後,每個遠端 import 網址都會變為 無論是我們的程式碼、子依附元件 或任何第三方。

npx rollup --input main.js --config ./rollup.config.mjs --file compiled.js

手動編輯檔案

最簡單的做法是刪除導致 RHC 的程式碼。在 Google 翻譯中 並刪除違規行。這通常是 因為內容很粗糙且可能會忘記,所以可能會令人忘記。這讓 名為「library.min.js」的檔案更難以維護專案不 actually 程式庫.min.js。比起編輯原始檔案 維護選項是使用 patch-package 等工具。這是超級英雄 可讓您將修改項目儲存至檔案,而非 檔案本身它的建構基礎為修補檔案,就如同 支援 GitSubversion 等版本管控系統。只需要 手動修改違規程式碼、儲存 diff 檔案,然後進行設定 修補程式-套件。您可以閱讀完整教學課程 專案的 readme 部分中。如果您要修補專案,我們 建議您與專案聯絡 上游。修補-套件可讓使用者輕鬆管理修補程式 我們沒辦法修補

代碼未使用時的處理方式

隨著程式碼集不斷擴增,依附元件 (或依附元件/依附元件的依附元件) ...) 可以保留不再使用的程式碼路徑。如果其中有任何部分 包括用來載入或執行 RHC 的程式碼,但「必須」移除。這項服務 任何時候都不重要。如未使用, 透過樹林清除,或修補程式庫以將其移除

是否有「任何」解決方法?

一般說來,不可以。不允許使用 RHC。不過 系統在「可以」使用的情況下列出。大多數情況下 這就算是其他選擇

使用者指令碼 API

使用者指令碼是小型程式碼片段,通常是由 適用對象:TamperMonkeyViolentmonkey。這些管理員無法將 因此 User Script API 提供一種執行程式碼的方法 使用者自行提供的元件這「不」chrome.scripting.executeScript 或其他程式碼執行環境。 使用者必須啟用開發人員模式才能執行任何內容。如果 Chrome 網頁 商店審查團隊認為你的使用方式與其他用途 (例如使用者提供的程式碼) 可能會遭到拒絕,或 商店資訊。

chrome.debugger

chrome.debugger API 可讓擴充功能與 Chrome 開發人員工具通訊協定。上述通訊協定和 Chrome 開發人員工具和其他超棒工具。有了 擴充功能可以要求並執行遠端程式碼。這和使用者指令碼一樣 替代 chrome.scripting,且提供更加出色的使用者體驗。 使用期間,使用者會在畫面頂端看到警告列 視窗。如果橫幅是關閉或關閉,偵錯工作階段就會是 已經終止。

Chrome 網址列的螢幕截圖,畫面中顯示「Debugger Extension 已開始偵錯這個瀏覽器」訊息
Chrome 網址列顯示「Debugger Extension startedDebug this Browser」訊息的螢幕截圖

採用沙箱機制的 iframe

如果您需要以程式碼形式評估字串,且位於 DOM 環境中 (例如 而不是擴充功能 Service Worker) 的 使用沙箱 iframe。擴充功能不支援 預設為 eval(),以備不時之需。惡意程式碼可能會危害使用者 並面臨安全性風險但程式碼只會在已知安全的情況下執行 就像在其他網路中採用沙箱機制的 iframe 這些風險可大幅降低在這種情況下,「內容安全性」 您可以解除禁止使用評估功能的政策 有效的 JavaScript 程式碼

如果這裡並未列出您的用途,歡迎與團隊聯絡 使用 chromium-extensions 郵寄清單取得意見回饋,或是開啟新的 用於要求 One Stop 支援服務指引的支援單

不同意判定結果時的處理方式

強制執行政策可能繁瑣,且需要手動輸入資料,也就是說 Chrome 線上應用程式商店團隊有時可能會同意變更審查決定。如果 如果您認為審查有誤,可以對遭拒提出申訴 使用 One Stop Support