Chrome应用程序:从后台脚本执行在应用程序窗口中定义的函数
Chrome App: Execute function defined in an app window from a background script
我有一个基本的画布游戏作为chrome应用程序。当我最小化游戏窗口时,游戏继续自己运行。当窗口最小化时,我想执行一个函数pause()
。
index.js(通过index.html中的<script>
标签包含)
...
function pause(){
paused = true;
pausebtn.classList.add('hidden');
pausemenu.classList.remove('hidden');
}
...
background.js
chrome.app.runtime.onLaunched.addListener(function() {
chrome.app.window.create('index.html', {
'outerBounds': {
'width': screen.availWidth,
'height': screen.availHeight
}
});
});
我把chrome.app.window.onMinimized.addListener()
放在哪里?
然后,从那里,我如何实际执行函数pause()
?
我在找这样的东西:
chrome.app.runtime.onLaunched.addListener(function() {
chrome.app.window.create('index.html', {
'outerBounds': {
'width': screen.availWidth,
'height': screen.availHeight
}
});
});
chrome.app.window.onMinimized.addListener(function(gamewindow){
gamewindow.pause();
});
首先,文档似乎没有真正正确地显示如何附加这些事件:它们附加到窗口实例,例如
chrome.app.runtime.onLaunched.addListener(function() {
chrome.app.window.create('index.html', {
'outerBounds': {
'width': screen.availWidth,
'height': screen.availHeight
}
}, function(createdWindow) {
createdWindow.onMinimized.addListener(function() {
/* code goes here */
});
});
});
至少有三种可能的答案,一种是直接的,一种是多抽象层的,还有一种是移动你的逻辑。
直接:
直接调用方法,通过使用contentWindow
属性:
createdWindow.contentWindow.pause();
这紧密耦合了代码:如果你重构应用程序的代码,你也需要重构后台脚本。
抽象:
传递一个消息,然后在游戏中处理它。
// background
chrome.runtime.sendMessage({pause: true});
// app window
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
if(message.pause) {
pause();
}
});
移动逻辑:
应用程序的脚本是而不是内容脚本。它们在API访问方面不受限制,因此可以自己侦听事件——这可能是最不尴尬的方法。
// app window
chrome.app.window.current().onMinimized.addListener(pause);
. .是的,就是这样。
相关文章:
- Chrome应用程序调整窗口大小保持纵横比
- 在我的应用程序中,当我使用targent as_blank时,弹出窗口被阻止
- Chrome应用程序在全屏中创建新窗口-html元素不是全高的
- 如何将 html5 画布另存为窗口 8 Metro 应用程序中的图像文件
- 应用程序引擎终结点:用于OAuth2授权的Javascript客户端库需要多个弹出窗口
- HTA应用程序:将窗口放在屏幕的右下角
- 在ios Cordova应用程序中打开iTunes窗口
- IE窗口失去了对任何XMLHttpRequest启动Angular应用程序的关注
- 是否可以使用javascript激活windows应用程序窗口
- 在Metro应用程序中获取窗口尺寸
- 如何为Tide Sdk应用程序窗口设置固定大小
- 如何使用chrome应用程序窗口动态调整文本区域的大小
- 使谷歌打包的应用程序窗口可拖动
- Chrome应用程序:从后台脚本执行在应用程序窗口中定义的函数
- 如何在ChromeOS应用程序窗口中启用文本选择
- 屏幕重新打开后,快速更新Chrome应用程序窗口
- 在Chrome应用程序的应用程序窗口关闭时关闭Websocket
- 缩放Chrome应用程序窗口取决于显示大小
- 如何使用Node.js获取在Mac前台运行的应用程序窗口的坐标
- 如何从我的应用程序窗口删除元素