本文介绍了Firefox加载项window.navigator.userAgent错误:未定义窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图获得


  • 在Chrome代码中使用Windows


  • I am trying to get userAgent and want to do some parsing on it:

    My code is:

    var userAgentInfo = {
        userAgent: null,
    
        init: function() {
            this.userAgent = window.navigator.userAgent;//ERROR
        },
    
        getOS: function(UA) {
            //Some logic
        },
    
        getDevice: function(UA) {
            //Some logic
        },
        getBrowser: function(UA) {
            //Some logic
        },
    };
    

    Whenever I try to start/test this extension I receive the following error:

    Running tests on Firefox 24.3.0/Gecko 24.3.0 ({ec8030f7-c20a-464f-9b0e-13a3a9e97384}) under linux/x86-gcc3.
    Error: ReferenceError: window is not defined
     Traceback (most recent call last):
      File "resource://jid1-u33krawc1uacsa-at-jetpack/amazon_rewriter/tests/test-main.js", line 1, in
    

    How I can get userAgent here without getting window and navigator object?

    解决方案

    Firefox add-ons generally run in a scope where the global window object is not defined (if it is defined depends on how the portion of your code that is currently running was entered). If you want to use methods/objects associated with a window object, the easiest way is to obtain a reference to an appropriate window object. For some/many things it is possible to do so without obtaining such a reference, but it is usually easier to just get a reference to the most recent browser window.

    If a browser window exists (in some instances you could be running where no browser window exists, yet, e.g. at start-up), you can obtain a reference to the most recent browser window, document, and gBrowser with:

    if (window === null || typeof window !== "object") {
        //If you do not already have a window reference, you need to obtain one:
        //  Add/remove a "/" to comment/un-comment the code appropriate for your add-on type.
        //* Add-on SDK:
        var window = require('sdk/window/utils').getMostRecentBrowserWindow();
        //*/
        /* Overlay and bootstrap (from almost any context/scope):
        var window=Components.classes["@mozilla.org/appshell/window-mediator;1"]
                             .getService(Components.interfaces.nsIWindowMediator)
                             .getMostRecentWindow("navigator:browser");
        //*/
    }
    if (typeof document === "undefined") {
        //If there is no document defined, get it
        var document = window.content.document;
    }
    if (typeof gBrowser === "undefined") {
        //If there is no gBrowser defined, get it
        var gBrowser = window.gBrowser;
    }
    

    The lack of having the global window object available is something that many people encounter as a problem.

    References:

    1. SDK: window/utils
    2. SDK: windows
    3. nsIWindowMediator
    4. Working with windows in chrome code

    这篇关于Firefox加载项window.navigator.userAgent错误:未定义窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

    08-30 17:08