微软在推出Edge浏览器之初,就把能够使用扩展(extension)作为一个重要功能。在Win10一周年更新版(1607)中,这项功能正式向广大用户推出(当然,Insider用户早就测试了一段时间了)。在Build2016上,微软表明,为了简化开发者的工作,正在准备推出一款专用工具,用于将Chrome浏览器的扩展移植到Edge浏览器中。

▲商店中已有的Edge扩展

 1.简介
     最近,这项工具(Microsoft Edge Extension Toolkit)也面世了。这个工具还挂着一个Preview,离完美的转制还有一段距离。但是经过几个Bug fix更新,已经能完成基本的转制工作了。这款工具适用于一周年更新版,已经能在Windows10商店下载。点此前往Windows应用商店下载。

▲Microsoft Edge Extension Toolkit

这款工具加载了Chrome扩展项目后,会创建所需的JSON清单(manifest.json),并且使用一个APIBridge为扩展中的Chrome API做一个转换。
      经过一番摸索,我成功转制了几个Chrome扩展。转制后的扩展已经可以地被安装到Edge,但是那些扩展的一部分功能还不能正常运行。应该是API的问题。从已经发布的扩展来看,Edge已经支持了许多扩展用的API了。问题应该是目前这个工具的APIBridge能够转换的Chrome API还不够丰富。

 2.转制
      现在开始以一个案例来介绍转制流程吧。首先我下载了惠惠购物助手Chrome版(youdaogouwu-4.2.9.6.crx)。然后将其后缀名改为zip,解压就可以得到他的项目代码和资源了。打开Microsoft Edge Extension Toolkit,点击左上角的Load extension to convert按钮,选择刚才解压的项目文件夹。

转制工具加载后进行分析,同时为项目添加了一个清单和两个Bridge。

这时候我们要根据转制工具下面的提示进行修改。显然红色的是错误,蓝色的是项目中成功被桥接的API。      其中一定会遇到的,数量不少,同时也很容易解决的错误是下面这种。要求你更换Chrome扩展协议的标识。
loader.js:  chrome-extension protocol should be replaced. recommend using getExtensionProtocol() - defined in API bridge
点击错误就会跳转到具体的代码行

按照建议,修改方法就是把他改成下面这样

猜测这样改的意义应该是让他在Chrome中还可以运行,但是为了方便的无脑替换,我选择直接改成ms-browser-extension:

你会发现这个错误数量不少,然而这个preview版转制工具的编辑功能不是很好,连查找替换都没有。所以我们先点击左上角的save files,然后关掉他,用VS code或者别的什么编辑器把loader.js和extension_3_1_chrome.css改好。

替换全部,保存文件就行了。这时候再用转制工具打开,错误就只剩下清单错误了,参考清单样板,咱们一个个来。

官方文档的清单样板  https://developer.microsoft.com/en-us/microsoft-edge/platform/documentation/extensions/api-support/supported-manifest-keys/json-manifest-example/

{
"name" : "Sample extension manifest",
"version" : "1.0.0.0",
"author" : "Microsoft Corporation",
"browser_action" :
{
"default_icon" :
{
"20" : "icon_20.png",
"40" : "icon_40.png"
},
"default_title" : "Sample extension",
"default_popup" : "popup.html"
},
"content_scripts" : [{
"js" : ["content_script.js"],
"matches" : ["*://*/*"]
}
],
"content_security_policy" : "script-src 'self'; object-src 'self'",
"default_locale" : "en",
"description" : "This is a sample extension that illustrates the JSON manifest schema",
"options_page" : "options.html",
"permissions" :
[
"*://*/*", "notifications", "cookies", "tabs", "storage", "contextMenus", "background"
],
"background" :
{
"page" : "background.html",
"persistent" : false
},
"icons" : {
"128" : "icon_128.png",
"16" : "icon_16.png",
"48" : "icon_48.png"
},
"minimum_edge_version" : "33.14281.1000.0",
"web_accessible_resources" : ["icon_48.png"]
}

错误1:icon的大小未定义

错误2:.background缺少参数persistent(是否在后台持续运行),购物助手的话我想是需要的。

 错误3:author太短,实际上是没有填。随意填一个

注意:这个工具目前的版本有一个Bug。按照上面修改这些清单文件的错误是正确的,但是下面报的错误却不减反增,给人造成困惑。关掉工具重新打开,再加载一次项目就会发现这些错误不见了。
别忘了点击保存,Ctrl+S快捷键目前是无效的,说多了都是泪。

至此这个项目就算转制完成了。通过Info可以看出,有8处Chrome的API被桥接成功。工具会在代码行左边添加了标识。

同时也能轻易看到还有别的API没有被桥接,这注定了目前的转制效果还不够好。

 3.安装

那么如何安装那些没有正式发布的扩展?
      首先浏览器地址栏输入 about:flags ,进入开发者设置页,启用开发扩展功能。

然后扩展管理页就会新增一个按钮,点击加载扩展然后选择扩展的文件夹即可。

这里就加载刚才转制的惠惠购物助手 。目前这个转制扩展虽然能跑能设置,但是还不能正常发挥他的大部分功能。那些使用较少,较普通的Chrome API的扩展,目前的转制效果就会比较好。

 

这个工具未来的更新着重于支持桥接更多的Chrome API。相信等到这个工具摘掉Preview的那一天,使用方法应与此篇教程写作之时几无差别,但我们轻松转制出来的扩展程序都能够良好地发挥他们的功能。

当然,更可靠的方式始终是直接开发面向Edge的扩展,不过当前文档较少,还属于起步阶段。下面就分享一篇手动创建“二维码分享扩展”的博文
      “如何自己创建一个Edge 浏览器扩展” https://blogs.msdn.microsoft.com/micl/2016/09/03/edge-extension-create-a-custom-edge-extension/
      扩展项目地址 https://github.com/micli/EdgeQRCode-Extension

Chrome扩展移植到Edge浏览器教程的更多相关文章

  1. iNeuOS工业互联网操作系统,发布3.6.4版本:云端安全控制和实时日志功能,附Chrome、Firefox和Edge浏览器测试性能对比

    目       录 1.      概述... 2 2.      平台演示... 2 3.      云端控制和实时日志设计和技术... 2 4.      实时日志测试... 2 1.   概述 ...

  2. 清除页面广告?身为前端,自己做一款简易的chrome扩展吧

    大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插 ...

  3. 自己做一款简易的chrome扩展--清除页面广告

    大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插 ...

  4. chrome扩展安装图文教程

    众所周知chrome的各类插件,扩展很丰富,也有很多经典的应用.但是谷歌经常被墙,无法访问,想要通过访问谷歌的应用市场来直接安装浏览器扩展会比较让人抓狂,好不容易无数次刷新后打开了页面,找到了想要的应 ...

  5. Chrome扩展开发基础教程(附HelloWorld)

    1 概述 Chrome扩展开发的基础教程,代码基于原生JS+H5,教程内容基于谷歌扩展开发官方文档. 2 环境 Chrome 88.0.4324.96 Chromium 87.0.4280.141 B ...

  6. 如何创建一个Edge 浏览器扩展

    随着微软Windows 10 年度更新的发布,数次延宕的Edge 扩展功能终于得到了官方正式支持.我在我的另外一个博客上发布了如何创建一个Edge 浏览器扩展的博文,链接如下: https://blo ...

  7. Chrome浏览器扩展开发系列之八:Chrome扩展的数据存储

    Google Chrome浏览器扩展可以使用如下任何一种存储机制: HTML5的localStorage API实现的本地存储(此处略) Google的chrome.storage.* API实现的浏 ...

  8. Chrome浏览器扩展开发系列之一:初识Google Chrome扩展

    1.       Google Chrome扩展简介 Google Chrome扩展是一种软件,以增强Chrome浏览器的功能. Google Chrome扩展使用HTML.JavaScript.CS ...

  9. selenium初探:WebDriverException解决方法探索(以Chrome浏览器|IE浏览器|Edge浏览器为例)

    环境参考:win10-64位, python3.6.3, selenium3.7 在初试selenium运行以下代码时 from selenium import webdriver browser = ...

随机推荐

  1. zabbix 自定义指标数据来源

    1.cpu load https://blog.csdn.net/scugxl/article/details/77199403 1)基本含义:运行队列长度,表示当前有多少个正在等待的进程和正在执行的 ...

  2. SQL SERVER sa无法登陆的问题

    安装的时候选择了 Windows 身份验证模式,只能windows内置账户登录解决方法:先登录(SQL Server Management Studio ),点服务器,右键->属性->安全 ...

  3. ESlint中console.log报错问题

    ESlint中console.log报错问题 由于ESlint规范化,导致console.log的使用也会报错,下面是设置允许console.log控制台输出 描述:打开 package.json 文 ...

  4. html页面加载顺序

    页面总是从上往下执行 CSS为什么要放在头部 1.CSS可以和html一起同时进行解析和渲染 2.如果你把CSS放到body后面,不但没有跟html一起进行加载渲染,还要花费额外时间去加载CSS,这样 ...

  5. netty 实现简单的rpc调用

    yls 2020/5/23 netty 实现简单rpc准备 使用netty传输java bean对象,可以使用protobuf,也可以通过json转化 客户端要将调用的接口名称,方法名称,参数列表的类 ...

  6. springboot系列——重试机制原理和应用,还有比这个讲的更好的吗(附完整源码)

    1. 理解重试机制 2. 总结重试机制使用场景 3. spring-retry重试组件 4. 手写一个基于注解的重试组件 5. 重试机制下会出现的问题 6. 模板方法设计模式实现异步重试机制 如果有, ...

  7. [Android应用开发] 01.快速入门

    前言 这一篇,主要是把之前[安卓基础]系列的东西,做一个总结和补充.并举了两个例子:电话拨号器.短信发送器做巩固,在此也参考了黑马训练营的教学大纲. Android项目的目录结构 Activity:应 ...

  8. Spring_管理bean的生命周期

    Spring IOC 容器对 Bean 的生命周期进行管理的过程:通过构造器或工厂方法创建 Bean 实例为 Bean 的属性设置值和对其他 Bean 的引用将 Bean 实例传递给 Bean 后置处 ...

  9. 抽象类(abstract class)与抽象方法

    package cm.aff.abst; /* abstract:抽象的,,可以修饰类,方法 1.修饰类: 抽象类: ①不能被实例化 ②有构造器的 ③凡是类都有构造器 ④抽象方法所修饰的类一定是抽象类 ...

  10. 轻便的一句话反弹shell语句

    反弹shell往往是在攻击者无法直接连接受害者的情况下进行的操作,原因有很多,例如目标是局域网,或者开启防火墙的某些策略等情况,而这时,我们就可以让受害者主动向攻击者发起连接,被控端发起请求到控制端某 ...