正在将工作系统转换为chrome应用程序



在遇到基于浏览器的标准应用程序的一些限制后,我决定将其转换为不使用浏览器的chrome应用程序。

以下是所有相关部分。我试图解决的问题是为一个在浏览器中工作但在应用程序架构下不工作的按钮添加一个加载侦听器。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>POS Data Entry Sheet</title>
<link href="./POS.css" rel="stylesheet" type="text/css" />
<script src="./POS.js"></script>
<script src="./POS.underDevelopment.js"></script>
<script src="./POS.generateTable.js"></script>
<script src="./POS.menu.js"></script>
<script src="./POS.portion.js"></script>
<script src="./POS.formula.js"></script>
<script src="./POS.dialog.js"></script>
</head>
<body>
<script>
   addLoadListener(addHandlerForLoginButton);
</script>
<section id="login">
<h1>Please login:</h1>
<p>
   <label>User ID:</label><input type="text" id="userID">
   <label>Password:</label><input type="password" id="password">
   <button type="submit" id="loginButton">Login</button>
</p>
</section>
<div id="main"></div>  <!--Everything gets attached to this div.-->
</body>
</html>

以上所有内容都可以通过浏览器进行操作。我创建了清单:

{
  "name": "Point of Sale System",
  "description": "Dual currency Point of Sale System",
  "version": "0.1",
  "app": {
    "background": {
      "scripts": ["POS.dialog.js",
                  "POS.formula.js",
                  "POS.generateTable.js",
                  "POS.js",
                  "POS.menu.js",
                  "POS.portion.js",
                  "POS.underDevelopment.js",
                  "background.js"]
    }
  }
}

这是我第一次尝试后台.js它显示了基本页面,但内联脚本不起作用。

chrome.app.runtime.onLaunched.addListener(function() {
   chrome.app.window.create('POS.html', {
      'bounds': {
      'width': screen.availWidth,
      'height': screen.availHeight
      }
   });
});

因此,我注释掉了内联脚本,并尝试添加一个回调函数这也不起作用。根据调试工具,不会记录任何事件侦听器。

chrome.app.runtime.onLaunched.addListener(function() {
   chrome.app.window.create('POS.html', {
      'bounds': {
      'width': screen.availWidth,
      'height': screen.availHeight
      }
   }, function(win) {win.addEventListener('load', addHandlerForLoginButton, false);});
});

在尝试了我能想到的一切几个小时之后,我不知所措。为什么原始的内联脚本不起作用,为什么回调在Chrome应用程序架构中不起作用?

我认为您遇到了CSP问题,它不允许内联脚本或脚本块。看见http://developer.chrome.com/apps/contentSecurityPolicy.html详细信息。

您应该能够转换您的第一次尝试,只需创建一个page.js文件,通过script src='page.js'标记将其包括在内,并将脚本块的内容放入其中:

addLoadListener(addHandlerForLoginButton);

您的第二个versoin不起作用,因为回调的win参数不是DOM窗口,而是AppWindow。它有一个通过contentWindow属性附加的DOM窗口,请参阅http://developer.chrome.com/apps/app_window.html#type-有关详细信息,请参阅AppWindow。

最后,您不需要在清单的app.background.scripts字段中列出所有这些脚本,只需要列出后台脚本background.js。当您打开页面时,其他内容将根据需要加载。

最新更新