GVKun编程网logo

chrome 扩展 mv3 - 模块化服务工作者 js 文件(google 模块)

3

在本文中,我们将为您详细介绍chrome扩展mv3-模块化服务工作者js文件的相关知识,并且为您解答关于google模块的疑问,此外,我们还会提供一些关于Angular5服务工作者更新(SWUpdat

在本文中,我们将为您详细介绍chrome 扩展 mv3 - 模块化服务工作者 js 文件的相关知识,并且为您解答关于google 模块的疑问,此外,我们还会提供一些关于Angular5服务工作者更新(SWUpdate)未在Firefox上检测到.在chrome上工作、background_worker.js 和 popup.js 中的全局常量 - Chrome 扩展 v3、Chrome UI设计师谈Chrome与Chrome OS未来发展、Chrome 扩展 |无法从内容脚本生成文件,Chrome GPUCache 文件夹呈指数增长的有用信息。

本文目录一览:

chrome 扩展 mv3 - 模块化服务工作者 js 文件(google 模块)

chrome 扩展 mv3 - 模块化服务工作者 js 文件(google 模块)

首先,重要警告:

  • 警告!由于 bug in Chrome,如果在编译期间发生未处理的异常(语法错误,如未关闭的括号)或初始化(例如访问一个未定义的变量),所以我们将把代码包装在 try/catch 中。

  • 警告!工作文件必须位于根路径 in Chrome versions older than 93 中。

  • 警告!不要导入像 jQuery 这样的基于 DOM 的库,因为 Service Worker 没有 DOM,所以没有 document,{ {1}},依此类推。

1. importScripts

这个内置函数同步获取和运行脚本,以便它们的全局变量和函数立即可用。它只能在 worker 初始化时在第一个 JS 事件循环任务中使用,即您不能稍后从事件侦听器 (crbug) 中调用它。

manifest.json:

XMLHttpRequest

bg-loader.js 只是单独文件中实际代码的 try/catch 包装器:

"background": { "service_worker": "bg-loader.js" },

如果某个文件抛出错误,则不会导入后续文件。如果您想忽略此类错误并继续导入,请在其自己的 try-catch 块中单独导入此文件。

2. Chrome 92 及更新版本中的 ES 模块

通过将 try { importScripts('/path/file.js','/path2/file2.js' /*,and so on */); } catch (e) { console.error(e); } 添加到 manifest.json 中的 "type": "module" 声明来启用。

  • 可以使用静态 background 语句。
  • 动态 import 尚未实现 (crbug)。

manifest.json:

import()

bg.js:

"background": { "service_worker": "bg.js","type": "module" },"minimum_chrome_version": 92,

Angular5服务工作者更新(SWUpdate)未在Firefox上检测到.在chrome上工作

Angular5服务工作者更新(SWUpdate)未在Firefox上检测到.在chrome上工作

我正在使用Angular5和角度服务工作者.

我缓存了一些数据和一些资产,一切都按预期工作正常,甚至部署了代码.

现在,如果我更新一些代码并再次部署,则服务工作者不会更新.

所以,我已经通过Angular service worker链接和我实现了SwUpdate服务.

这是我的代码:

我创建了一个服务并在App Component中调用它

import { Injectable,ngzone } from '@angular/core';
import { interval } from 'rxjs/observable/interval';
import { SwUpdate } from '@angular/service-worker';
import { Observable } from 'rxjs/Rx';


@Injectable()
export class ServiceWorkerService {

  constructor(updates: SwUpdate,ngzone: ngzone) {
    console.log('Servicee worker update called');
    updates.available.subscribe(event => {
      console.log('current version is',event.current);
      console.log('available version is',event.available);
      updates.activateUpdate().then(() => document.location.reload());
    });
    updates.activated.subscribe(event => {
      console.log('old version was',event.prevIoUs);
      console.log('new version is',event.current);
    });
    ngzone.runOutsideAngular(() => {
      interval(6000).subscribe(() => {
        console.log('Inside Interval')
        ngzone.run(() => updates.checkForUpdate());
      });
    });
  }
}

上面的代码做了什么:

>每当部署新代码时,旧的服务工作者都会检测到它.
>然后它订阅updates.available事件.
>我们听那个事件,然后重新加载页面.

问题:

Now,the issue is,it is working perfectly on chrome. But not in
firefox
. In firefox,the code is not comming inside
updates.available.subscribe

解决方法

我有同样的问题,并能够通过在main.ts中注册服务工作者来解决它:

platformbrowserDynamic().bootstrapModule(AppModule).then(() => {
  if ('serviceWorker' in navigator && environment.production) {
    navigator.serviceWorker.register('/ngsw-worker.js');
  }
}).catch(err => console.log(err));

我还创建了一个Service worker服务,以便在有新的可用更新时通知用户:

enter image description here

如果您对我的服务工作者服务的外观感兴趣,您可以看到代码here.

您还可以访问yourdomain.com/ngsw/state来检查是否记录了任何错误

background_worker.js 和 popup.js 中的全局常量 - Chrome 扩展 v3

background_worker.js 和 popup.js 中的全局常量 - Chrome 扩展 v3

我创建了 constants.js。

// constants.js
var EXTENSION_MODE = Object.freeze({
    SEARCH_ONLY: "searchOnly",FILTER: "filter",OFF: "off"
})

将其注入 background-service-worker 文件(使用此处的答案 Service worker registration failed. Chrome extension 实际查看注入脚本中的错误。否则,您只会看到非常普遍的错误)

// background.js
try { importScripts("constants.js"); } catch (e) { console.error(e); }

现在 popup.js 仍然无法访问它,因为它在孤立的上下文中运行。 所以我也将它注入到 popup.html(以老式的方式)。

 <!-- popup.html -->
<body>
    <some-other-elements/>
    <script src="./constants.js"></script>
    <script src="./popup.js"></script>
</body>

我可以在 popup.js 中使用它

// popup.js
console.log("popup: " + EXTENSION_MODE.FILTER);

附注。在内容脚本上(使用 chrome.scripting.executeScript 注入),我们不会使用它。我们需要开始使用存储和消息传递 https://developer.chrome.com/docs/extensions/reference/storage/ https://developer.chrome.com/docs/extensions/mv3/messaging/

Chrome UI设计师谈Chrome与Chrome OS未来发展

Chrome UI设计师谈Chrome与Chrome OS未来发展

原来转自:Chrome迷

作为一款新型浏览器,Google Chrome 从发布之后就受到了用户的广泛关注,其用户群也在不断扩大。与此同时,Google 也正在打造为上网本设计的操作系统 Chrome OS 。近日,著名科技博客 Lifehacker 请到了 Chrome 团队的 UI(用户界面)设计师 Glen Murphy ,交谈了 Chrome 和 Chrome OS 未来的发展方向,解读了 Chrome Web Store 的重要意义以及解答触摸屏、键盘快捷键的相关问题。

Chrome Web Store 的公布是上周的 Google I/O 发布会上的一出重头戏。这个项目已经启动多久了? 从操作系统的设计角度来看,它又将带来怎样的挑战呢?

实际上我们从打算做 Chrome 浏览器的时候就一直在考虑这个项目,而当这一切开始的时候,Web Store 以及 Chrome 应用程序本身就已经成为了整个计划的重要组成部分。在过去的时间里我们专注于 Chrome 浏览器的开发而没有给大家提到这个在线商店,但现在我们工作的重心转移到线上商店了,而这也是我们整个计划的最后一个部分。

安全问题是我们面临的最大挑战——我们要保证用户不会受到恶意软件的侵害,当然这也是 Chrome 扩展所面临的问题。写一个“做恶”的扩展并不难,但要与用户交流完全避免这些带有侵略性的程序着实是个不小的挑战。

第二个挑战是如何在浏览器中将应用程序和常规网页进行区分,虽然说这确实有一些不同点,但很难定义这两者之间的不同,关键在于用户如何看待这个问题。在 Web Store 以及我们所建立的整个架构体系中,我们都使用“标签”来展示一切,希望用户也能够意识到这一点。

在 Chrome 项目中,最重要的界面设计原则是什么?

从一开始我们就关注内容而不是 Chrome 本身:让 Web 应用成为主角。其实用户根本不关心他们的电脑,他们也不应该关心。 把 Chrome 做成一个用户不需要了解它是什么的东西是我们最大的挑战,也是我们最好的老师,我们只需要朝着简洁、高效去发展就行了(译者注:就好像大部分人不知道IE 是什么,只知道蓝色的 e 代表着“上网”)。

使用浏览器打造一个操作系统的体系环境有多难? 能否举例说明?

那是相当的难,比如我们花了很多时间在用户的语言选择以及网络侦测方面,我们要让用户接入无线网络,并且选择他自己习惯的语言,尤其是对于大部分不 懂英语的 Chrome 用户这一点更为重要,而这恰恰是保持简洁的绊脚石。

你们似乎在Chrome中弱化了快捷键功能,快 捷键依然存在,但是在界面中通常没有提示。这是有意而为之吗?

我们旨在简化复杂操作。我们花费了大量时间和精力让快捷键更加易用,要知道 Chrome 是在 Google 开发测试的,而这里的每个人都是键盘党。我们也确实有这样的打算:鉴于很多用户习惯使用鼠标,而使用快捷键可以简化其中的很多操作,所以我们希望引导用户 使用,但又不能采用那种具有“侵略意味”的提示。在这个问题上我们做过很多讨论,要走的路还很长。

你们怎么看待将触摸功能作为 Chrome OS 的交互手段?

作为一群极客和技术爱好者,我们非常关注触摸功能,甚至到了狂热的程度。问题在于触摸功能在台式机上并没有太大建树,在便携式电脑上也只能算刚刚起 步。我们把Chrome装到平板电脑上,并做了很多探索。结果发现如果要将 Chrome OS 应用于触摸设备上,需要不少改进,比如在触摸屏上如果用户想点到屏幕顶端的标签就很费力,所以我们就需要改变标签栏的位置(译者注:难道 Chrome 的竖排标签就是为这个准备的?)。

Chrome 团队和 Androi d团队之间有沟通吗?

我们相互之间共享很多东西,比如 Chrome 的V8 Javascript 引擎已经移植到了 Android 平台上,又比如 Android 团队在开发浏览器地理定位规范时,就需要和我们通力合作。

在工作中,你怎么管理时间,保证一切都井井有条 呢?

我身上存在一个“效率循环”。我很喜欢使用新的机制去完成事情,在很早之前我就为工作计划做了一个待办事情单(To-do list)的小程序,但通常的情况是大约一个月之后,这个清单便失效了,效率又变低,所以我又要换一个清单。我想每隔一段时间我的脑子就“自动关机”了, 直到有新的技术来将其激活,然后新鲜劲维持一段时间,效率又变低,周而复始。

在 Google,每个人都有不同的方法来管理时间。很多人只有纸笔。有些人什么都没用,但效率却特别高!

Chrome接下来有什么计划?

我们接下来的重要任务之一是统一操作体验——让 Chrome 和 Chrome OS的用户在任何装载了 Chrome 产品的终端上都能轻松上手并获得相同的用户体验(译者注:主要指 Chrome 的同步功能)。这个计划实现难度不小,我们在原始平台上进行开发时不需要考虑操作系统层面的问题,但作为一个跨平台的软件,如何保证在各个平台上主题风格 的统一是个挑战,比如在Windows上一切正常的主题,在Mac上的显示效果便是未知的。这些都是我们需要考虑的问题。

Chrome 扩展 |无法从内容脚本生成文件,Chrome GPUCache 文件夹呈指数增长

Chrome 扩展 |无法从内容脚本生成文件,Chrome GPUCache 文件夹呈指数增长

如何解决Chrome 扩展 |无法从内容脚本生成文件,Chrome GPUCache 文件夹呈指数增长?

我正在开发一个 chrome 扩展,它依赖于执行一个内容脚本来生成一些内容的文本文件,当将扩展加载到 Chrome 浏览器解压时,我发现 GPUCache 文件夹位于下面的路径,随着空文件呈指数增长。

C:\Users\AppData\Local\Google\Chrome\User 数据\Grshadercache\GPUCache

此外,只要扩展存在就会发生其他问题,我在下面列出了我遇到的问题

  1. 如果您关闭 chrome 然后尝试正常打开它,它将不会打开,除非您打开任务管理器然后关闭其所有进程。
  2. 从互联网下载任何文件都会出现“无法下载”错误,如果您检查“下载路径”,您会发现已经下载了一些任意文件。
  3. 从内容脚本生成文本文件不起作用,尽管代码在扩展程序之外运行良好。 (见下文)

扩展代码

manifest.json

{
    "name": "My Extension","version": "1.0","manifest_version": 3,"action": {
        "default_title": "Click to view a popup","default_popup": "index.html"
    },"permissions": [
        "activeTab","scripting","tabs"
    ]
}

index.html

<!DOCTYPE html>
<html>

<head>
    <title>My Extension</title>
    <link rel="stylesheet" href="dist/bootstrap.min.css" type="text/css" />
    <style>
        body {
            min-width: 300px;
        }
    </style>

</head>

<body>
    <div>
        <h5>My Extension <small>v1.0.0</small></h5>
        <div>
            <p>Click "Start".</p>
            <input id="start" type="button"value="Start" />
        </div>
    </div>
    <script src="index.js"></script>
</body>

</html>

index.js

document.getElementById("start").addEventListener("click",start);

function start() {
    chrome.tabs.query({ active: true,currentwindow: true },function (tabs) {
        var tab = tabs[0];
        chrome.scripting.executeScript({
            target: { tabId: tab.id },files: [''page.js''],});
    })
}

page.js

// this function is a proof of concept of what i intend to do
function download(filename,text) {
    var element = document.createElement(''a'');
    element.setAttribute(''href'',''data:text/plain;charset=utf-8,'' + encodeURIComponent(text));
    element.setAttribute(''download'',filename);

    element.style.display = ''none'';
    document.body.appendChild(element);

    element.click();

    document.body.removeChild(element);
}

download("hello.txt","This is the content of my file :)");

我的 Chrome 版本:92.0.4515.107

知道为什么会这样吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

今天的关于chrome 扩展 mv3 - 模块化服务工作者 js 文件google 模块的分享已经结束,谢谢您的关注,如果想了解更多关于Angular5服务工作者更新(SWUpdate)未在Firefox上检测到.在chrome上工作、background_worker.js 和 popup.js 中的全局常量 - Chrome 扩展 v3、Chrome UI设计师谈Chrome与Chrome OS未来发展、Chrome 扩展 |无法从内容脚本生成文件,Chrome GPUCache 文件夹呈指数增长的相关知识,请在本站进行查询。

本文标签: