Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用附加SDK更改选项卡的样式_Javascript_Css_Firefox_Firefox Addon_Firefox Addon Sdk - Fatal编程技术网

Javascript 使用附加SDK更改选项卡的样式

Javascript 使用附加SDK更改选项卡的样式,javascript,css,firefox,firefox-addon,firefox-addon-sdk,Javascript,Css,Firefox,Firefox Addon,Firefox Addon Sdk,我正在尝试使用附加SDK动态更改选项卡的样式。我该怎么做 以下是我尝试过的: 我可以访问如下选项卡对象: var tabs=require('sdk/tabs'); tabs.on('ready',function(tab){ console.log('url is: '+tab.url); //-> url is http://www.google.com console.log('stlye is: '+tab.url); //-> style is null });

我正在尝试使用附加SDK动态更改选项卡的样式。我该怎么做

以下是我尝试过的:

我可以访问如下选项卡对象:

var tabs=require('sdk/tabs');
tabs.on('ready',function(tab){
  console.log('url is: '+tab.url); //-> url is http://www.google.com
  console.log('stlye is: '+tab.url); //-> style is null
});
但是style属性为
null
,并且没有以下工作:

tab.setAttribute('style','background-color:blue'); // the method doesn't exist
tab.style.backgroundColor='blue'; // type error because style is null
tab.style='background-color:blue'; // has no effect
那么,如何动态更改选项卡的样式呢?我尝试过的另一件事是使用以下命令将选项卡转换为XUL对象:

但是代码抛出了一个错误:在中找不到模块“sdk/model/core”resource://gre/modules/commonjs/sdk/model/core.js
尽管我按照说明创建了core.js文件。另外,我不理解大括号在
var{modelFor}=
语法中的作用。

您需要访问xul tab元素

试试这个:

var tabsLib = require("tabs/tab.js");
var tab = tabsLib.getTabForWindow(htmlWindow);
tab.style.color = 'red'; //makes the tab text red
htmlWindow
作为html文档的最顶部窗口传递。比如
document.defaultView.top
<代码>文档。默认视图是
文档的
窗口

如果这不起作用,那么只获取浏览器窗口,本例获取最新的浏览器窗口(请记住,可能有多个浏览器窗口处于打开状态(浏览器窗口是一个具有选项卡的firefox窗口,[可能还有弹出窗口-我在sdk中不确定])

const{getMostRecentBrowserWindow}=require('sdk/window/utils');
var aDOMWindow=getMostRecentBrowserWindow();
if(aDOMWindow.gBrowser&&aDOMWindow.gBrowser.tabContainer){
var tabs=aDOMWindow.gBrowser.tabContainer.childNodes;

for(var i=0;谢谢你!我真的很感谢你的帮助,很快就会尝试你的解决方案。你能解释一下
const{getMostRecentBrowserWindow}=/code>语法吗?花括号做什么?它是ES6解构吗?
const
只是一个
var
,在那行之后不能更改。是的,花括号和等于的意思是,“在
require('sdk/window/utils')
的对象中查找
getMostRecentBrowserWindow
,并将其带到您的范围内,带到您的
const
var
“。如果对象中没有
getMostRecentWindow
,它将不起作用。第二个代码块工作得很好。第一个代码块不起作用,因为
htmlWindow
未定义,但可能我误解了。这太好了!谢谢你。
var tabsLib = require("tabs/tab.js");
var tab = tabsLib.getTabForWindow(htmlWindow);
tab.style.color = 'red'; //makes the tab text red
    const { getMostRecentBrowserWindow } = require('sdk/window/utils');
    var aDOMWindow = getMostRecentBrowserWindow();
    if (aDOMWindow.gBrowser && aDOMWindow.gBrowser.tabContainer) {
        var tabs = aDOMWindow.gBrowser.tabContainer.childNodes;
            for (var i=0; i<tabs.length; i++) {
                tabs[i].style.color = 'red'; //makes the tab text red;
           }
    }