簡體   English   中英

Firefox插件Javascript對象管理

[英]Firefox addon Javascript Object Management

嘿!
我將我的添加內容提交到Mozilla add ons網站,編輯回來告訴我只有一個問題:

您的初步審核請求已獲批准。

以下是您需要在下一版本中修復的一些內容,特別是如果您想申請完全批准:

1)為了防止與用戶可能安裝的其他附加組件發生沖突,您需要將“松散”變量和函數包裝在JavaScript對象中。 您可以在https://developer.mozilla.org/en/XUL_School/JavaScript_Object_Management上查看有關如何執行此操作的示例。

所以我去了那里開始閱讀...但是很多東西對我來說都是胡言亂語而且讓自己感到困惑(根本不難做到!)

使用該頁面上的第一個示例,您能否告訴我如何修改我的xul文件?

現在它看起來像這樣:

  <?xml version="1.0"?>
  <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>

  <overlay id="quickfilterOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="chrome://quickfilter/content/quickfilter.js">
  </script>
  </overlay>

提前致謝! [R

編輯:
已在此處上傳了整個添加內容: http//www.mediafire.com/?ff6bjzjy6n39nx

建議將代碼封裝在命名空間中以避免名稱沖突。 這是我在插件中總是做的事情:

if(!org) var org={};
if(!org.janek) org.janek={};

org.janek.Addon = function() {

  var pub = {};
  var self = this;

  pub.init = function() {
     //
     // Initialize addon, setup listeners, ...
     //
  }

  ...

  self.thisIsAPrivateMethod = function(arg) {
    // method that's only visible inside org.janek.Addon
  }

  return pub;
}();


// Init addin after window loaded
window.addEventListener("load",
                        org.janek.Addon.init,
                        false);

首先,我創建自己的命名空間org.janek,確保它不存在。 然后我添加對象Addon,它將包含我的插件的代碼。

請注意“酒吧”和“自我”物品。 應該可以從其他對象調用的每個方法都會添加到pub對象中。 私人方法被添加到自我。

更具體地說,我將quickfilter_extension更改為以下代碼(我將全局prefManager對象作為示例包含在內):

var quickfilter_extension = function() {
    var pub = {};

    // interface for preferences
    pub.prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);

    pub.init = function() {
        //Initiating the progressListerner
        gBrowser.addProgressListener(quickfilter_urlBarListener, Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
        //Load the block list xml form server
        quickfilter_quickfilter.request_xml();
    },

    pub.uninit =  function() {
        // Remove the progressListerner
        gBrowser.removeProgressListener(quickfilter_urlBarListener);
    }

    return pub;
}();

現在使用prefManager對象的代碼需要通過quickfilter_extension對象:

redirectToAnotherUrl:function()
{
    [ ... omitted ...]
    qucikFilterRedirectCount = quickfilter_extension.prefManager.getCharPref("extensions.quickfilter_redirect_count");

    [ ... omitted ...]
}

Yahoo的javascript庫YUI的博客有一篇關於模式的好文章

評論者正在討論您的JS代碼,建議您擁有全局變量/函數。

例如:

var x = 1;
function foo() {}

與之相比:

MyPluginName = {};
MyPluginName.x = 1;
MyPluginName.foo = function(){}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM