浏览器交互:插件管理、窗口、标签

插件管理

chrome.management 模块提供了管理已安装和正在运行中的扩展或应用的方法。对于重写内建的新标签页的扩展尤其有用。

声明

{
  "name": "My extension",
  ...
  "permissions": [ "management" ],
  ...
}

方法

get

chrome.management.get(string id, function callback)

//callback: function(ExtensionInfo result) {...};

获得指定id的扩展/应用的信息。关于扩展的id,可以在扩展的详细信息里查看,例如:
在这里插入图片描述

 $('#management').click((e) => {
     let str = '<br />'
     chrome.management.get('feolnkbgcbjmamimpfcnklggdcbgakhe', (result) => {
         str += result.name
         $('#content').html(str)
     })
 });

返回一个对象,对象里的属性对应的就是manifest文件中声明的属性。

getAll

chrome.management.getAll(function callback)
//callback: function(array of ExtensionInfo result) {...};

返回所有已安装的扩展。

$('#management').click((e) => {
    let str = '<br />'
    chrome.management.getAll((list) => {
        list.forEach(item => {
            str += item.name + '、'
        })
        $('#content').html(str)
    })
});

在这里插入图片描述
getPermissionWarningsById

chrome.management.getPermissionWarningsById(string id, function callback)

// callback:function(array of string permissionWarnings) {...};

获得指定id的扩展的权限提醒。

launchApp

chrome.management.launchApp(string id, function callback)
// callback:function() {...};

启动一个应用。

setEnabled

chrome.management.setEnabled(string id, boolean enabled, function callback)
// callback:function() {...};

启用或禁用一个应用或扩展。

uninstall

chrome.management.uninstall(string id, function callback)

// callback:function() {...};

卸载一个应用或扩展。

事件

onDisabled

chrome.management.onDisabled.addListener(function(ExtensionInfo info) {...});

当应用或扩展被禁用时触发。

onEnabled

chrome.management.onEnabled.addListener(function(ExtensionInfo info) {...});

当应用或扩展被启用时触发。

onInstalled

chrome.management.onUninstalled.addListener(function(string id) {...});

当应用或扩展被卸载时触发。

窗口

使用chrome.windows模块与浏览器视窗进行交互。 你可以使用这个模块在浏览器中创建、修改和重新排列视窗。

在这里插入图片描述

声明

{
  "name": "My extension",
  ...
  "permissions": ["tabs"],
  ...
}

当前视窗

很多扩展系统的功能有一个可选的windowId参数,其默认值为当前视窗。

当前视窗是指包含当前正在执行的代码的视窗。重要的是要认识到,它可以跟最顶层或有焦点的视窗不一样。

例如,假设一个扩展从一个单一的HTML文件中创建了一些标签或视窗,而这个HTML文件包含一个chrome.tabs.getSelected的调用 。 当前视窗是指那个包含了发起调用的页面的视窗,不管它是不是最顶层视窗。

方法

create

chrome.windows.create(object createData, function callback)

使用任何可选大小、位置或者默认提供的URL来创建(打开)一个新的浏览器。

  • createData ( optional object可选,对象 )
      • url ( optional string or array of string 可选,字符串或者字符串数组)
      • 一个或者一组在视窗作为标签打开的URL。完全合格的URL必须包括一个类型(即’http://www.google.com’,不是’www.google.com’)。相对URL将与扩展内的当前页相关。默认为新的标签页面。
      • tabId ( optional integer可选,整数 )
        你想要在新视窗选定的标签的id。
      • left ( optional integer 可选,整数 )
        新视窗相对于屏幕的左边缘的位置的像素值。如果没有指定,那么新的视窗从最后一个有焦点的视窗自然偏移。
      • top ( optional integer可选,整数 )
        新视窗相对于屏幕的上边缘的位置的像素值。如果没有指定,那么新的视窗从最后一个有焦点的视窗自然偏移。
      • width ( optional integer可选,整数 )
        新视窗的像素宽度。如果没有指定,默认为自然宽度。
      • height ( optional integer可选,整数 )
        新视窗的像素高度。如果没有指定,默认为自然高度。
      • incognito ( optional boolean可选,Boolean类型 )
        新视窗是否是隐身。
      • type ( optional enumerated string [“normal”, “popup”]可选,枚举字符串[“normal”, “popup”] )
        指定新建浏览器视窗的类型。
  • callback ( optional function可选,函数 ),function(Window window) {...};
 $('#window').click((e) => {
     chrome.windows.create({
         url: 'https://blog.csdn.net/weixin_41897680?type=blog'
     }, window => {

     })
 });

在这里插入图片描述

get

chrome.windows.get(integer windowId, function callback)
// callback : function(Window window) {...};

获取有关窗口的详细信息。

getAll

chrome.windows.getAll(object getInfo, function callback)
  • getInfo ( optional object可选,对象 )
      • populate ( optional boolean 可选,Boolean类型)
        如果是true表示每个视窗对象都有一个包含该视窗所有标签的tabs属性。
  • callback ( function函数 )

getCurrent

chrome.windows.getCurrent(function callback)
// callback :function(Window window) {...};

获得当前视窗。

$('#window').click((e) => {
     chrome.windows.getCurrent(window => {
         let str = '<br />' + '当前窗口ID是:' + window.id
         $('#content').html(str)
     })
 });

在这里插入图片描述
getLastFocused

chrome.windows.getLastFocused(function callback)
// callback :function(Window window) {...};

获取最近有焦点的视窗 — 一般是最顶层的视窗。

remove

chrome.windows.remove(integer windowId, function callback)
// callback :function() {...};

关闭一个视窗以及其包含的所有标签。

update

chrome.windows.update(integer windowId, object updateInfo, function callback)

更新一个视窗的属性。只指定那些你希望修改的属性,未指定的属性将保持不变。
在这里插入图片描述

事件

onCreated

chrome.windows.onCreated.addListener(function(Window window) {...});

当一个新视窗被创建时触发。

onFocusChanged

chrome.windows.onFocusChanged.addListener(function(integer windowId) {...});

当前获得焦点窗口改变时触发。

onRemoved

chrome.windows.onRemoved.addListener(function(integer windowId) {...});

当一个视窗被关闭时触发。

标签

chrome标签模块被用于和浏览器的标签系统交互。此模块被用于创建,修改,重新排列浏览器中的标签。.
在这里插入图片描述

声明

{
  "name": "My extension",
  ...
  "permissions": [
    "tabs"
  ],
  ...
}

方法

captureVisibleTab

chrome.tabs.captureVisibleTab(integer windowId, object options, function callback)

在特定窗口中,抓取当前选中标签的可视区域。 这要求必须在 host permission 中指定对标签URL的访问权限。

  • windowId ( optional integer )
    目标窗口,默认值为当前窗口.
  • options ( optional object )
    设置抓取图像参数。设置图像抓取的参数,比如生成的图像的格式。
      • format ( optional enumerated string [“jpeg”, “png”] )
        生成的图像的格式。默认是jpeg。
      • quality ( optional integer )
        如果格式是’jpeg’,控制结果图像的质量。此参数对PNG图像无效。当质量降低的时候,抓取的画质会下降,需要存储的字节数也会递减。
  • callback ( function ),function(string dataUrl) {...};
      • dataUrl ( string )
        被抓取标签的可视区域的URL。此URL可能会作为图像的src属性。格式为base64的格式
 $('#tab').click((e) => {
     chrome.tabs.captureVisibleTab(null, {
         format: "png",
         quality: 100
     }, dataUrl => {
         let img = $(`<img src="${dataUrl}" />`).attr('width', '200px').attr('height', '200px')
         $("#content").append(img)
     })
 });

在这里插入图片描述
connect

Port chrome.tabs.connect(integer tabId, object connectInfo)

连接到特定标签中的content script(s)。 事件 chrome.extension.onConnect 将被触发给每个指定页面上运行的content script扩展。

  • tabId ( integer )
  • connectInfo ( optional object )
      • name ( optional string )
        会被传输到监听连接事件的content scirpt的onConnect函数当中。

create

chrome.tabs.create(object createProperties, function callback)

创建新的标签。注: 无需请求manifest的标签权限,此方法也可以被使用。

  • createProperties ( object )
      • windowId ( optional integer )
        创建新标签的目标窗口。默认是当前窗口 。
      • index ( optional integer )
        标签在窗口中的位置。 值在零至标签数量之间。
      • url ( optional string )
        标签导航的初始页面。完整的URL 必须包含一个前缀 (如 ‘http://www.google.com’, 不能写为 ‘www.google.com’)。 相对 URL则与扩展所在的页面相对, 默认值为新标签页面。
      • selected ( optional boolean )
        标签是否成为选中标签。默认为true。
      • pinned ( optional boolean )
        标签是否被固定。默认值为false。
  • callback ( optional function )
      • function(Tab tab) {...};
$('#tab').click((e) => {
    chrome.tabs.create(
        {
            index: 5,
            url: 'https://www.runoob.com/'
        },
        tab => {
            $('#content').html(`新标签创建完成,标题是:${tab.title}`)
        }
    )
});

detectLanguage

chrome.tabs.detectLanguage(integer tabId, function callback)

检测标签内容的主要语言。

  • tabId ( optional integer )
    默认为"当前窗口"所选定的标签。
  • callback ( function )
      • function(string language) {...};
 $('#tab').click((e) => {
     chrome.tabs.detectLanguage(null,
         language => {
             $('#content').html(`当前窗口语言是:${language}`)
         }
     )
 });

好像有个缺点,如果当前语言切换了,但是没有刷新页面,再次检测时显示的语言是上一次的语言。
在这里插入图片描述
executeScript

注:v3中已经废弃,统一使用 chrome.scripting.executeScript

chrome.tabs.executeScript(integer tabId, object details, function callback)

向页面注入JavaScript 脚本执行

  • tabId ( optional integer )
    运行脚本的标签ID;默认为当前窗口所选中的标签。
  • details ( object )
    要执行的脚本内容,可选code或者file,但不能同时选两者。
      • code ( optional string )
        要执行的脚本代码。
      • file ( optional string )
        要执行的脚本文件。
      • allFrames ( optional boolean )
        true的时候,给所有frame执行脚本。默认为false,只给顶级frame执行脚本。
  • callback ( optional function )
    所有脚本执行后会被调用的回调。
      • function() {...};

get

chrome.tabs.get(integer tabId, function callback)

获取指定标签的细节信息。

  • tabId ( integer )
  • callback ( function )
      • function(Tab tab) {...};

getAllInWindow

chrome.tabs.getAllInWindow(integer windowId, function callback)

获取指定窗口所有标签的细节信息。

  • windowId ( optional integer )
    默认为当前窗口。
  • callback ( function ),function(array of Tab tabs) {...};

getCurrent

chrome.tabs.getCurrent(function callback)
// callback function(Tab tab) {...};

获取生成脚本调用的标签。此函数不适用于脚本被非标签内容调用的情况。(例如: 背景页 或者 弹出视图) 。

getSelected

获取特定窗口指定的标签。已弃用,使用query 来代替

$('#tab').click((e) => {
    chrome.tabs.query(
        {
            active: true,
            lastFocusedWindow: true
        },
        tab => {
            $('#content').html(`当前窗口是:${tab[0].title}`)
        }
    )
});

在这里插入图片描述
insertCSS
注:v3中已经废弃,统一使用 chrome.scripting.executeScript

chrome.tabs.insertCSS(integer tabId, object details, function callback)

向页面注入CSS。参数同 executeScript

move

chrome.tabs.move(integer tabId, object moveProperties, function callback)

把标签移动至窗口内特定的位置,或者移至一个新窗口。请注意只能在普通窗口之间切移(window.type === “normal”) 。

  • tabId ( integer )
  • moveProperties ( object )
      • windowId ( optional integer )
        默认为标签所在的窗口。
      • index ( integer )
        移动到的目标窗口位置。赋值必须在零至目标窗口的标签数目之间。
  • callback ( optional function ),function(array of Tab tabs) {...};
$('#tab').click((e) => {
    chrome.tabs.move(792174554, { index: 2 },
        tab => {
            $('#content').html(`当前窗口是:${tab.title}`)
        }
    )
});

在这里插入图片描述
remove

chrome.tabs.remove(integer tabId, function callback)

关闭标签

  • tabId ( integer )
  • callback ( optional function ),function(array of Tab tabs) {...};

sendRequest

chrome.tabs.sendRequest(integer tabId, any request, function responseCallback)

向特定的标签content script发送一个的请求, 并在响应返回时,可附带一个回调。在所有content script响应请求后, chrome.extension.onRequest 事件将会为当前扩展触发。

  • tabId ( integer )
  • request ( any )
  • responseCallback ( optional function )
      • response ( any )
        响应的JSON对象。如果错误发生,回调将不会有参数。并会在 chrome.extension.lastError 产生一个错误。

update

chrome.tabs.update(integer tabId, object updateProperties, function callback)

修改标签的属性。没有在updateProperties 中指定的属性不会被修改。注:即使没有向manifest 请求’tabs’权限,这个方法依然适用。

  • tabId ( integer )
  • updateProperties ( object )
      • url ( optional undefined )
        让标签浏览的URL。
      • selected ( optional boolean )
        标签是否应被选中。
      • pinned ( optional boolean )
        标签是否应被固定。
  • callback ( optional function ),function(Tab tab) {...};

事件

onCreated

chrome.tabs.onCreated.addListener(function(Tab tab) {...});

标签创建时,此事件触发。请注意,当事件触发时,标签的 URL 可能没有被设置, 但是当URL被设置时,可以通过onUpdated 事件接听。

onDetached

chrome.tabs.onDetached.addListener(function(integer tabId, object detachInfo) {...});

当标签从窗口脱离时,此事件被触发,例如标签在窗口之间移动。

  • tabId ( integer )
  • detachInfo ( object )
      • oldWindowId ( integer )
      • oldPosition ( integer )

onMoved

chrome.tabs.onMoved.addListener(function(integer tabId, object moveInfo) {...});

当标签在窗口内移动时,此事件被触发。只有一个移动事件被触发,给用户直接移动的标签。其他响应移动事件的标签不触发移动事件。

  • tabId ( integer )
  • moveInfo ( object )
      • windowId ( integer )
      • fromIndex ( integer )
      • toIndex ( integer )

onRemoved

chrome.tabs.onRemoved.addListener(function(integer tabId, object removeInfo) {...});

当窗口选中的标签改变时,此事件触发

onUpdated

chrome.tabs.onUpdated.addListener(function(integer tabId, object changeInfo, Tab tab) {...});

当标签更新时,此事件被触发。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
400个插件,下面的详细列表: mxp/ColdFusion中的Include mxp/80多个国家的一个下拉菜单,在某些时候的确挺方便的 mxp/检查当前文件的兼容性和可能包含的错误,并会给出详细的检测报告 mxp/在代码编辑框中选择一段脚本代码,然后使用这个插件,可以把这些代码放到一个单独的js文件中 mxp/在Dreamweaver中快速的插入一个Fireworks做好的图片,不过好象只能做空白图 :( mxp/这个插件用来代替Dreamweaver File菜单下的New Form Template命令。作用是可以侦测出站点内的模板,这样就直接打开了,而不象以前还需要在对话框中选择 mxp/在代码编辑环境下,插入一个脚本函数,函数名和参数都可以自定义的 mxp/这个插件很有意思,让你的窗口从大变小,或者从小变大 mxp/用来更新Configuration-TagAttributeList.txt这个文件 mxp/插入中文空格 mxp/Jet制作的飘浮图片插件,没时间封装,Redidea友情封装 mxp/Chromeless Windows标题bug修改版 mxp/使窗口过一段时间后自动关闭 mxp/用来做电子商务的插件。不过只停留在表面的html语句和form的action,没有涉及后台程序 mxp/替换Dreamweaver自带的show-hide layer behavior,从而使更好的支持Netscape 6 mxp/用来代替Dreamweaver自带的Set Text of Layer behavior,从而使得在Netscape 6下兼容 mxp/打开一个新窗口,并让窗口在屏幕上居中 mxp/Chromeless Windows,比我做的X-window好。 mxp/可以联合Authorware, CourseBuilder extension for Dreamweaver ,UltraDev, Macromedia Flash Learning Extensions, and Director等等的一系列软件做一个教学站点 mxp/对当前文件生成一个备份文件,以便修改 mxp/在site窗口的文件上点一下右键就出现这个插件了。作用是把文件复制或者移动到某个文件夹 mxp/层的转换特效,2.0版 mxp/加入JSP中的Include mxp/用表单外部的事件来提交表单 mxp/用表单外部的事件来控制表单的行为,包括提交,清空等等 mxp/可以对文本框中的内容做多种限制,比如不包含空格、引号等等 mxp/在Dreamweaver的File菜单下加一个Print code命令,用来打印代码 mxp/Splash Window,也叫chromeless splash , 一种效果很不错的浏览器窗口 mxp/在代码编辑窗的点右键,可以快速跳转到特定的代码行 mxp/在site窗口中的本地文件夹选择一个文件点右键,就可以打开当前文件所在的目录,很方便的 mxp/在代码编辑框中点右键就可使用。该插件可以让插件编写者用一些Windows风格的对话框来和用户进行交互 mxp/创建一个JustSo风格的相册 mxp/插件开发者使用,用来Debug mxp/Dreamweaver中的Menu.xml是记录Dreamweaver菜单信息的文件,由于某些原因,经常容易损坏,此插件可以创建备份文件并恢复 mxp/打开一个Web对话框窗口,也是很特别的一种,没有最大和最小化按钮 mxp/使一个多行的表格行和行之间颜色交替,像斑马线一样。2.0版本 mxp/可以倒出-倒入站点信息,方便其他开发者 mxp/插入e-Vue MPEG-4格式的文件 mxp/Mycomputer.com提供的一套Banner交换系统,使用起来需要注册,比较麻烦 mxp/MyComputer.com提供的一套站点访问跟踪系统,也是需要注册,使用麻烦 mxp/在页面中加入一个SiteMiner.com搜索引擎的接口,MyComputer.com提供 mxp/在页面中加入一个MyComputer.com提供的留言本,需要注册,使用麻烦 mxp/计算代码的字符个数 mxp/一个比Dreamweaver自带的Jump menu更好的下拉导航菜单 mxp/对Dreamweaver目录下的FtpExtensionsMap.txt文件进行编辑。此文件定义了某类型的文件以二进制或者文本方式ftp mxp/自动将窗口最大化 mxp/由MyComputer.com提供的一套投票程序,需要注册,使用烦琐 mxp/用来在Dreamweaver环境下编辑安装目录下的Extensions.txt文件,此文件记录的文件扩展名和文件类型的关系 mxp/加入一个指向邮件地址的连接,并可以自定
### 回答1: 当浏览器使用Flash时,其在网页中的位置和层级通常会较高。而当网页中同时使用了JavaScript制作的插件时,这些插件的层级会比Flash低。这就导致了在浏览器中,Flash会遮挡掉JavaScript插件。 这种情况下,我们可以通过一些方法来解决遮挡的问题。其中一种方法是使用CSS属性来设置插件的层级。我们可以通过设置插件所在元素的CSS属性“z-index”,将其值设置为比Flash元素的层级值更高,从而使插件显示在Flash的上方。 另外,如果插件被遮挡是因为Flash的层级值太高,我们也可以考虑通过调整Flash元素的层级值来解决遮挡问题。可以将Flash元素的层级值设置为较低的值,以确保插件能够在其上方正常显示。 此外,还有一种方法是通过使用“wmode”参数来调整Flash的窗口模式。Flash的窗口模式决定了其在网页中的透明度和层叠行为。我们可以尝试将窗口模式设置为“transparent”,使Flash变为透明模式,在这种模式下,Flash将不会遮挡插件。 总的来说,当浏览器使用Flash时,JavaScript制作的插件可能会被遮挡。我们可以通过调整插件的层级值、Flash元素的层级值或者调整Flash的窗口模式来解决这个问题,以确保插件正常显示在浏览器中。 ### 回答2: 当浏览器使用Flash时,可能会出现JavaScript做的插件被遮挡的情况。这是由于Flash在网页中的显示层级较高的原因,它可能会覆盖在JavaScript插件上方。这种情况下,用户可能会看不到或无法与JavaScript插件进行交互。 要解决这个问题,可以采取以下几种方法: 1. 调整层级关系:通过调整JavaScript插件和Flash元素的CSS层级,确保JavaScript插件在Flash元素之上。可以使用CSS的z-index属性来实现层级调整。 2. 使用透明背景:如果不需要Flash元素的背景,可以将Flash元素的背景设为透明,这样JavaScript插件就可以显示在其上。 3. 使用跨浏览器解决方案:一些JavaScript库和框架提供了解决浏览器兼容性问题的功能。通过使用这些解决方案,可以更好地处理Flash和JavaScript插件之间的层级冲突。 4. 避免使用Flash:考虑到HTML5技术的发展和对Flash的废弃,可以尽量减少或避免使用Flash。使用HTML5的替代方案(例如使用Canvas来实现动画效果)可以避免Flash和JavaScript插件的层级冲突。 总结来说,当浏览器使用Flash时,JavaScript做的插件可能会出现被遮挡的情况。通过调整层级关系、使用透明背景、使用跨浏览器解决方案或避免使用Flash等方法,可以解决这个问题。 ### 回答3: 当浏览器使用Flash时,JS做的插件可能会出现遮挡。这是因为浏览器在解析网页时会按照一定的层次结构进行渲染,Flash在浏览器渲染的过程中会被视为更高层级的元素,而JS做的插件则处于较低层级的位置。 由于层级的差异,Flash元素往往会覆盖住处于底层的JS插件,因此导致了遮挡问题的出现。这可能导致部分功能无法正常使用,使得用户体验下降。 解决这个问题的方法有以下几种: 1. 修改层级关系:通过调整JS插件和Flash元素所在的层级,使得JS插件处于更高层级的位置,可以解决遮挡问题。 2. 使用替代技术:考虑使用HTML5等替代技术来替代Flash,在不使用Flash的情况下,可以避免因为Flash引起的遮挡问题。 3. 动态加载:通过延迟加载或动态添加JS插件,可以避免在Flash加载之前出现遮挡的情况,提升用户体验。 4. 适配响应式布局:在设计和开发网页时,考虑到不同浏览器及设备的兼容性,使用响应式布局可以使得页面在不同环境下都能整齐呈现,避免遮挡问题。 综上所述,当浏览器使用Flash时,JS做的插件会出现遮挡的问题。通过调整元素层级关系、使用替代技术、动态加载或使用响应式布局等方法可以解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值