【问题标题】:Depeloping firefox addon - hide all toolbarsDepeloping firefox插件 - 隐藏所有工具栏
【发布时间】:2014-06-05 02:50:40
【问题描述】:

我的扩展程序在新的 FF 选项卡中打开。我希望在选项卡处于活动状态时隐藏所有工具栏(除了选项卡栏)。 我想要的是标准 FF 插件选项卡的工作方式(工具->插件)。

【问题讨论】:

    标签: javascript firefox firefox-addon xul


    【解决方案1】:

    将此代码复制粘贴到浏览器环境的暂存器中并运行它:

    Cu.import('resource://gre/modules/Services.jsm');
    var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
    try {
        sss.unregisterSheet(cssUri, sss.USER_SHEET);
    } catch (ex) {}
    
    var css = '';
    css += 'toolbar { display: none }';
    var cssEnc = encodeURIComponent(css);
        var newURIParam = {
            aURL: 'data:text/css,' + cssEnc,
            aOriginCharset: null,
            aBaseURI: null
    }
    var cssUri = Services.io.newURI(newURIParam.aURL, newURIParam.aOriginCharset, newURIParam.aBaseURI);
    sss.loadAndRegisterSheet(cssUri, sss.USER_SHEET);
    

    删除只需运行sss.unregisterSheet(cssUri, sss.USER_SHEET);

    【讨论】:

    • 它可以在暂存器中使用。但是如何在我的扩展中实现它呢?
    • 我得看看你的插件。是在github上吗?
    • 你应该可以复制粘贴到你的 adon 中。只需删除顶部的 try 语句,当您想要删除它时,只需使用 unregister 部分。虽然这会影响所有窗口,而不仅仅是那个窗口。您可能只想将 css 加载到当前窗口中。如果是这种情况,请告诉我,我会告诉你loadSheet 方法。
    • 样式表服务实际上不是这类任务的好选择,因为它例如破坏 View*/*Toolbars 或干扰其他插件做工具栏的事情。
    • 嗯,非常正确。但我认为他不希望在他的标签集中时查看功能,因此一旦他转到另一个标签(或当他取消注册时),它将根据视图工具栏正确反映。
    【解决方案2】:

    你没有写你正在开发什么样的扩展...... SDK 或 XUL。

    在 XUL 扩展中,首先获取所有工具栏,然后根据您的意愿设置collapsed

    这是一些相同的代码。

    function toggleToolbars() {
      // First get all toolbars (that are not the tab bar)
      var tbs = Array.filter(document.querySelectorAll('toolbar'), function (x) {
        return x.id != 'TabsToolbar';
      });
      // For each toolbar 
      for (var tb of tbs) {
        // Either un-collapse if we collapsed it.
        if (tb.getAttribute('my-addon-collapsed')) {
          tb.removeAttribute('collapsed');
          tb.removeAttribute('my-addon-collapsed');
        }
        // Or collapse other-wise, if not already collapsed
        else if (!tb.getAttribute('collapsed')) {
          tb.setAttribute('collapsed', 'true');
          tb.setAttribute('my-addon-collapsed', 'true');
        }
      }
    }
    

    您可能希望修复代码以处理极端情况,例如用户手动恢复工具栏、其他插件稍后添加全新的工具栏等等。

    在 SDK 插件中,您需要首先访问实际的 browser.xul 窗口。我确定如何做到这一点已经在 SO 上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多