Google Chrome打包应用窗口

时间:2014-05-29 09:49:46

标签: javascript jquery html google-chrome google-chrome-app

我正在创建一个Chrome打包应用,它有两个页面[暂时]。并通过页面平均实际的.html文件。一个叫做login.html,另一个叫index.html。

现在与用户相关的所有内容都存储在chrome.storage.local中。

以下是在chrome.js中启动页面的代码。

chrome.app.runtime.onLaunched.addListener(function () {
    var dimensions = getDimensions(screen),
        positions = getPositions(screen);

    chrome.storage.local.get('login', function (result) {
        if(result.login.status === "loggedOut") {
            chrome.app.window.create('login.html', {
                id: 'loginWindow',
                'bounds': {
                    'width':    400,
                    'height':   600
                },
                minWidth: 400,
                minHeight: 600,
                maxWidth: 400,
                maxHeight: 600,
                frame: 'none'
            });
        } else {
            chrome.app.window.create('index.html', {
                id: 'mainWindow',
                'bounds': {
                    'top':      positions.top,
                    'left':     positions.left,
                    'width':    dimensions.width,
                    'height':   dimensions.height
                },
                minWidth: dimensions.width,
                minHeight: dimensions.height,
                maxWidth: dimensions.width,
                maxHeight: dimensions.height,
                frame: 'none'
            });
        }
    });
});

现在因为chrome.storage.local.get login.status === loggedOut它会使用登录表单弹出登录页面。那么当用户输入正确的凭据时,我该如何继续。如何关闭登录窗口然后打开主页面。上面的代码只是下次打开index.html而不是再次显示登录。

我已经完成了检查凭据的代码,但是我现在想要关闭登录表单窗口并打开一个新的index.html,其中包含相同的边界,最大值,最小值和高度,如您所见。上面的代码。

以下是我正在寻找的内容:[现在这是在login.html中调用的,在login.html中调用]

if(login === success) {
    // close login window and goto mainWindow
} else {
    // Username or password is wrong
}

提前致谢!

2 个答案:

答案 0 :(得分:1)

要完成此操作,您需要添加此项检查是否在chrome.storage.local内发生了更改。

chrome.storage.onChanged.addListener(function(changes, namespace) {
    chrome.storage.local.get('login', function (result) {
        if (result.login.status === "loggedIn") {
            chrome.app.window.get('loginWindow').close();
            chrome.app.window.create('index.html', {
                id: 'mainWindow',
                'bounds': {
                    'top':      positions.top,
                    'left':     positions.left,
                    'width':    dimensions.width,
                    'height':   dimensions.height
                },
                minWidth: dimensions.width,
                minHeight: dimensions.height,
                maxWidth: dimensions.width,
                maxHeight: dimensions.height,
                frame: 'none'
            });
        }
    });
});

当然,您可以使用这些更改和命名空间,但我选择将它们排除在外。

答案 1 :(得分:0)

MiroRauhala已回答了您的直接问题,但也许您应该重新考虑应用的结构。

Chrome应用不像普通网站那样具有导航功能。它们有窗口,每个窗口对应一个不同的html页面。您可以在一个文档中使用不同的div,而不是关闭一个窗口并打开一个具有完全相同边界的新窗口,您可以根据需要隐藏和显示这些div。

我认为从长远来看,改变你的结构会带来更简单的应用程序。

如果你选择单独的窗口方法,你需要小心。例如,如果向窗口添加id并指定边界,则仅在第一次显示边界时应用边界。之后它会记住界限。你可以通过创建隐藏,然后移动它,然后显示它来解决这个问题。您可能会遇到其他类似的事情,因为您正在以一种它未设计的方式使用Chrome应用程序平台。