在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

chrome插件新版本(v3版本)中的熱更新,即加載更新遠程js的方法探索

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-06-14 10:19 ? 次閱讀

1 主流方案及嘗試

現在瀏覽器插件中,大多采用直接調用遠程代碼的方式進行熱更新,由于安全策略逐步增強,越來越不支持熱更新了;chrome在新v3版本插件中直接給禁止了;對于v2版本則即將廢棄使用。

或者要翻墻到google應用商店提交審核,才能熱更新。

wKgaomZrqKeASJSlAAP54WDuE2g646.png

?

2 當前問題

1、由于安全策略逐步增強,越來越不支持熱更新了,之前可以直接調用遠程資源的方法均被禁止了;

2、chrome插件開發中,v2版本是支持熱更新的,但明年v2版本將被廢棄到;

3、所有chrome插件都要盡快升級成v3版本,然而v3版本不支持熱更新。

4、需要要到翻墻到google應用商店提交審核,等審核通過后,且用戶本身要至此翻墻才能進行插件熱更新。

3 技術原理

chrome.runtime.getURL獲取js地址的方法是新版v3瀏覽器本身支持的方法,可以用它來獲取插件安裝包中的內部靜態資源,來進行加載。

本發明流程如下圖所示:

wKgZomZrqKmAY8Z8AAVsKuZVn7g621.png

瀏覽器插件的新版均只允許加載本地資源,而限制外部資源的加載;本發明同樣遵循瀏覽器內核要求,在serviceworker中加載插件中預制資源inject_base.js到頁面里,需要直接或間接用chrome.runtime.getURL方法加載inject_base.js資源,然后再從inject_base.js中加載遠端inject.js資源即可,此處兩步過程可以擴展到三步或更多步驟,但不可省略這兩個步驟。

inject.js中會有插件的核心功能資源,當需要熱更新插件功能時,直接更新外部資源inject.js即可。

4 方案實施

在遵循瀏覽器內核安全控制要求下,我們可以如下操作:

1) 先在serviceworker中通過chrome.runtime.getURL獲取url地址的方法動態加載預制資源inject_base.js;此處若用chrome.scripting.executeScript方法動態加載預制資源,則需先加載一個橋接資源inject_base_bridge.js,然后再在inject_base_bridge.js中用chrome.runtime.getURL方法動態加載遠端indect_base.js,然后進行第二步;

function inject(){
	const injectPath = "js/inject.js";
	 const script = document.createElement("script");
	 script.setAttribute("type", "text/javascript");
	 // 重點是這句
	 script.src = chrome.runtime.getURL(injectPath);
	 document.body.appendChild(script);
}

該步驟中需要注意的是:不可以直接用chrome.runtime.getURL或chrome.scripting.executeScript這兩個方法,而是需要用onMessage監聽來動態使用這兩個方法,否則后續js資源的加載則只在安裝或刷新時生效一次,而不能在每個頁面中都成功加載。

?

function injectJsCode(srcList=["js/inject_base.js"]) {
  chrome.tabs.query(
    {
      active: true,
      currentWindow: true,
    },
    (tabs) => {
      if (tabs[0]) {
        // 注入插件預制js
        let _injectJsList = srcList;
        chrome.scripting.executeScript({
          target: { tabId: tabs[0].id },
          files: _injectJsList,
        });
      }
    }
  );
}

chrome.runtime.onMessage.addListener(function (message, sender, sendResponse) {
  switch (message.type) {
    case "inject-code":
      injectJsCode();
      return true;
  }
});

2)再從inject_base.js中加載遠端inject.js資源即可;當發布新功能時,直接發布遠端的新版inject.js即可直接熱更新插件功能。

具體邏輯如下圖所示:

wKgaomZrqKuAM_RnAAS9wShQE7c795.png

onMessage監聽來動態使用擦灰姑娘如方法,確保后續js資源在每個頁面中都成功加載;需要從content_scripts中設置發送腳本輸入的消息通知:

chrome.runtime.sendMessage(chrome.runtime.id, message, callback)

這樣就可以隨時愉快的更新插件發布新功能了。

5 方案總結

該方案目前所打的包,在用戶直接下載、解壓、使用時比較合適;大多在未發布到chrome應用商店時使用較為便捷。若要在chrome官方應用商店發布,則需改造。待后續總結整理...

wKgZomZrqK2AIF8QAAkGnESj91s967.png




審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JS
    JS
    +關注

    關注

    0

    文章

    78

    瀏覽量

    18106
  • 瀏覽器
    +關注

    關注

    1

    文章

    1025

    瀏覽量

    35358
  • Chrome
    +關注

    關注

    0

    文章

    344

    瀏覽量

    18036
收藏 人收藏

    評論

    相關推薦

    蘋果iTunes 更新至11.0.4版本

    `今天,蘋果對旗下iTunes應 用進行了版 更新,11.0.4新版本修復了一些iTunes存在的已知bug。根據新版本
    發表于 06-07 08:55

    把老版本AD升級到最新版本AD19的方法

    `目前Altium Designer 最高版本是19,大家想體驗最新版本的各項功能嗎?可以按下列方法進行升級!【備注:以下內容來自網絡,版權歸原作者所有。如有侵權或異議,請讓網刪除
    發表于 12-11 19:18

    使用新版本IAR編譯老版本的STM32工程

    使用新版本IAR編譯老版本的STM32工程1、引言IAR作為STM32芯片的常用編譯器,其版本更新較快,特別是大版本
    發表于 08-24 06:08

    如何使用更新版本的MbedTLS?

    。ST在CubeMX更新版本需要多長時間?我將如何使用更新版本的 MbedTLS?似乎我有兩個選擇。一種是使用 ST 版本構建項目,然后使用新版本
    發表于 12-15 09:06

    在SDK構建過程如何將其更新到最新版本或選擇替代版本

    我正在使用帶有為 MCUXpresso IDE 生成的 SDK 的 FRDM-K66F 板。我看到當我生成 SDK 時,CMSIS DSP 庫的包含版本V1.4.5 b。在 SDK 構建過程如何將其
    發表于 04-14 07:10

    FilterPro v3.0設計工具的最新版本

    FilterPro v3.0設計工具的最新版本 TI推出其普及型 FilterProTM 設計工具的最新版本。該 FilterPro v3.0
    發表于 05-17 13:36 ?8180次閱讀

    SteamVR獲新版本更新 已全面支持OculusRiftSVR頭顯

    SteamVR平臺迎來新版本更新,宣布現在已經全面支持最近發布的Oculus Rift S VR頭顯,此外該版本還修復了“眾多穩定性問題和錯誤”。
    發表于 06-18 16:31 ?1947次閱讀

    谷歌Gboard鍵盤安卓9.1.4版本更新

    谷歌Gboard鍵盤安卓版現已更新9.1.4版本新版本縮短了輸入延遲時間和啟動時間。
    的頭像 發表于 03-09 14:31 ?2492次閱讀

    谷歌將暫時停止ChromeChrome OS的版本更新

    谷歌今日發公告稱,將暫時中斷 ChromeChrome OS 的版本更新,并優先考慮安全和穩定性。公告全文如下:“由于目前的工作日程已調整,我們正在暫停即將推出的
    的頭像 發表于 03-19 09:26 ?2244次閱讀

    蘋果正式發布了新版本的iWork套件

    近日,蘋果正式發布了新版本的iWork套件,目前三大App均更新至10.0版本,如果你在使用運行iOS或者iPadOS的設備,不妨抓緊時間升級。
    的頭像 發表于 04-01 15:30 ?2399次閱讀

    榮耀V40推送4.0.0.132新版本更新

    2月24日,榮耀V40推送了4.0.0.132版本更新。此次更新優化了相機和顯示體驗,增強了系統穩定性,更新包大小為300MB。此次
    的頭像 發表于 02-25 13:43 ?3429次閱讀

    FreeRTOS歷史版本更新記錄

    前言:本文會不定期更新,一方面FreeRTOS發布新版本時會第一時間跟進;另一方面,會慢慢補上V8.0之后的版本更新內容。
    發表于 01-26 17:28 ?0次下載
    FreeRTOS歷史<b class='flag-5'>版本</b><b class='flag-5'>更新</b>記錄

    谷歌發布Chrome新版本

    近日,谷歌正式發布Chrome 100,該瀏覽器今天剛剛發布了版本號為 100 的最新版本,目前,Mac、Windows、安卓和iOS平臺都已經開始同步推送更新
    的頭像 發表于 03-30 16:54 ?2399次閱讀

    瑞薩e2studio----更新FSP版本

    本篇文章主要介紹如何在瑞薩的FSP更新新版本之后,同步更新e2studio軟件的FSP版本
    的頭像 發表于 12-07 10:47 ?2374次閱讀
    瑞薩e2studio----<b class='flag-5'>更新</b>FSP<b class='flag-5'>版本</b>

    實戰經驗 | TouchGFX從舊版本更新新版本方法

    關鍵詞:TouchGFX,版本升級 目錄預覽 1、引言 2、TouchGFX軟件升級安裝 3、工程項目由舊版本遷移到新版本TouchGFX 4、軟件升級遇到的常見問題 01 引言 隨著
    的頭像 發表于 11-01 17:15 ?1139次閱讀
    主站蜘蛛池模板: 天堂在线最新版www中文| 欧美肥胖女人bbwbbw视频| 久久天天躁狠狠躁夜夜免费观看 | 一区二区三区免费视频网站| 日本三级视频在线| 777成了人乱视频| 婷婷 色天使| 婷婷月| 国产nv精品你懂得| 边摸边吃奶边做视频叫床韩剧| 在线高清国产| 国产精品视频一区二区三区| 黄网在线免费观看| 亚洲成人在线电影| 俺去在线| 一二三区视频| 欧美日韩啪啪| 啪啪伊人网| 伊人久久成人成综合网222| 一本到卡二卡三卡福利| 四虎影视免费观看| 亚洲第一成人在线| 亚a在线| 久久精品免费观看视频| 大香线蕉97久久| 婷婷五月情| 午夜影院在线观看| 免费污视频在线| 国产视频日本| sis色中色| 你懂的在线观看视频| 狠狠操精品视频| 天堂资源在线bt种子8| 在线干| 被公侵犯肉体中文字幕一区二区 | 藏经阁在线| 一区二区三区四区无限乱码在线观看 | 97capcom超频在线| 色老久久精品偷偷鲁一区| 视频福利网| 天堂网www中文在线资源|