Javascript 谷歌浏览器应用程序:网络视图行为
在研究关于Chrome扩展的Javascript 谷歌浏览器应用程序:网络视图行为,javascript,google-chrome,google-chrome-app,behavior,google-chrome-webview,Javascript,Google Chrome,Google Chrome App,Behavior,Google Chrome Webview,在研究关于Chrome扩展的问题时,Chrome应用程序中的吸引了我的眼球并引起了我的兴趣 所以我决定做一个小例子来说明我在上面临的问题,看看是否能解决它。根据我对Chrome开发者视频的理解,webview与你的应用程序在一个单独的过程中运行;它没有与你的应用程序相同的权限。因此,我假设如果运行中的内容以某种方式与“主线程”(应用程序)分离,我猜它们的内容将彼此独立执行,不会阻塞应用程序或其他应用程序,以防它们中的任何一个可能有一个长时间运行的js executon。因此,我做了以下工作: b
问题时,Chrome应用程序中的
吸引了我的眼球并引起了我的兴趣
所以我决定做一个小例子来说明我在
上面临的问题,看看
是否能解决它。根据我对Chrome开发者视频的理解,webview
与你的应用程序在一个单独的过程中运行;它没有与你的应用程序相同的权限。因此,我假设如果运行中的内容以某种方式与“主线程”(应用程序)分离,我猜它们的内容将彼此独立执行,不会阻塞应用程序或其他应用程序,以防它们中的任何一个可能有一个长时间运行的js executon。因此,我做了以下工作:
background.js
manifest.json
window.html
你好,世界!
其中三个是普通网页,第四个只是一个长时间运行的js文件的示例,您可以检查代码,或者我可以稍后提供。
如果我打开4个GoogleChrome浏览器窗口,输入地址,按enter键,我会观察到:3个页面即时加载,另一个长js执行仍然可以工作
如果我在一个网页中这样做,使用打开这4个网页,因为它都在同一个过程中,如果1个页面由于js执行而变慢/阻塞,所有其他页面都将被阻塞
现在使用Chrome应用程序,我注意到了一些有趣和奇怪的行为。我注意到:
,对我来说将发生的是:前三个被加载,第四个正在执行,完成并显示之后,我看到第五个被渲染提前感谢您。网络视图运行的进程与您的应用程序不同,但它们在同一分区中彼此运行的进程相同。如果不指定分区属性,则它们将位于相同的默认分区属性中。如果您检查Chrome任务管理器(shift+esc),您将看到: (注意进程ID列) 如果改为使用tag属性将每个webview设置为不同的分区:
你好,世界!
您将看到每个webview现在都在其自己的进程中运行:
也许您可以尝试使用webview提供的事件(loadstart和loadstop)来记录每个webview加载的开始时间和结束时间,这样您就可以看到加载的顺序,无论它们是并发的还是顺序的。真的很神奇,它与分区的预期效果一样。我假设通过使用标签webview,它将创建一个与其他webview不同的进程。我对标签webview的功能感到震惊。感谢您清理进程行为。是否可以使用相同的分区,但允许每个webview以某种方式拥有单独的进程?
chrome.app.runtime.onLaunched.addListener(function() {
// Tell your app what to launch and how.
chrome.app.window.create('window.html', {
width: 1800,
height: 1000
});
});
{
// Required
"name": "Hello World!",
"version": "0.1",
"manifest_version": 2,
// Recommended
"description": "My first packaged app.",
"icons": { "16": "calculator-16.png", "128": "calculator-128.png" },
// "default_locale": "en",
// Pick one (or none) OF browser_action, page_action, theme, app
"app": {
"background": {
"scripts": [ "background.js" ]
}
},
"minimum_chrome_version": "23",
"permissions": [ "webview" ]
}
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div>Hello, world!</div>
<webview id="wv1" style="width: 450px; height: 300px; border: 2px solid red" src="http://www.google.com"></webview>
<webview id="wv2" style="width: 450px; height: 300px; border: 2px solid red" src="http://www.nytimes.com"></webview>
<webview id="wv3" style="width: 450px; height: 300px; border: 2px solid red" src="http://www.stackoverflow.com"></webview>
<webview id="wv4" style="width: 450px; height: 300px; border: 2px solid red" src="http://db.tt/FCCA7nuz"></webview>
</body>
</html>