javascript - 谷歌浏览器应用 : Webview behavior

标签 javascript google-chrome google-chrome-app behavior google-chrome-webview

在研究 <iframe> 上的问题时在 Chrome 扩展上,<webview>在 Chrome 应用程序中引起了我的注意并引起了我的兴趣。

所以我决定做一个我在 <iframe> 上面临的问题的小例子看看是否<webview>解决它。根据我对观看 Chrome 开发视频的理解,webview在与您的应用程序不同的进程中运行;它没有与您的应用程序相同的权限。所以我假设如果运行中的内容以某种方式与“主线程”(应用程序)分开,我猜他们的内容将彼此分开执行而不阻塞应用程序或另一个,以防它们中的任何一个可能有可能长时间运行的 js 执行。因此我做了以下事情:

背景.js

chrome.app.runtime.onLaunched.addListener(function() {
  // Tell your app what to launch and how.
  chrome.app.window.create('window.html', {
      width: 1800,
      height: 1000
  });
});

list .json

{
  // 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" ]

}

窗口.html

<!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>

其中三个 webviews 是普通网页,第四个只是一个长时间运行的 js 文件的示例,您可以检查代码或者我稍后提供。 如果我打开 4 个 google chrome 浏览器窗口,输入地址,按回车键,我会观察到:3 个页面立即加载,另一个执行长 js 的页面仍然有效。

如果我在一个网页中这样做,用于打开这 4 个网页,因为它们都在同一个进程中,如果 1 个页面由于 js 执行而缓慢/阻塞,所有其他页面将被阻塞。

现在使用 Chrome 应用程序,使用我注意到一些有趣和奇怪的行为。我注意到以下几点:

  1. 如果我只加载前 3 个网页,加载速度很快,而且看起来是“同时”;
  2. 如果我按原样加载所有网页,我会看到前 3 个页面正在加载,最后一个页面因为它有一个很长的 js 执行需要他的时间然后它显示(这将是最佳行为),因为它们是不同的他们不应该依赖的进程如果 webview 很慢,其他人必须等待;
  3. 现在,如果我评论第三个,刷新并执行该应用程序,我将看不到 webview,直到带有 longscript 的那个完成。 (为什么会这样?)
  4. 上面的点是随机的,要么像我提到的那样发生,要么没有发生。
  5. 最后,让我们再添加一个 <webview id="wv5" style="width: 450px; height: 300px; border: 2px solid red" src="http://developer.chrome.com"></webview> ,对我来说会发生的是:前三个被加载,第四个正在执行,完成并显示后我看到第五个呈现。

我的主要问题/怀疑是关于行为的,因为它们实际上是在一个单独的进程中运行,为什么它没有与浏览器窗口相同的行为,例如,为什么 webview 阻止其他人工作/呈现,它打算按原样工作吗?我是否应该采取一些解决方法来检测一段时间后 webview 是否未完成以跳过加载并让其他人加载,这样我就可以回到慢速的?

提前谢谢你。

最佳答案

Webview 运行在与您的应用程序不同的进程中,但它们运行在同一分区中彼此相同的进程中。如果您不指定分区属性,它们将位于相同的默认值中。如果您检查 Chrome 任务管理器 (shift+esc),您将看到: enter image description here

(注意进程 ID 列)

如果您改为使用标签属性将每个 webview 设置为不同的分区:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <div>Hello, world!</div>
    <webview id="wv1" partition="p1" style="width: 450px; height: 300px; border: 2px solid red" src="http://www.google.com"></webview>
    <webview id="wv2" partition="p2" style="width: 450px; height: 300px; border: 2px solid red" src="http://www.nytimes.com"></webview>
    <webview id="wv3" partition="p3" style="width: 450px; height: 300px; border: 2px solid red" src="http://www.stackoverflow.com"></webview>
    <webview id="wv4" partition="p4" style="width: 450px; height: 300px; border: 2px solid red" src="http://db.tt/FCCA7nuz"></webview>
  </body>
</html>

您会看到每个 webview 现在都在自己的进程中运行:

enter image description here

关于javascript - 谷歌浏览器应用 : Webview behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635739/

相关文章:

javascript - 使用 javascript 创建一个新元素

javascript - 在不重新加载页面的情况下更改图像 src

javascript - 文件 API、网络 worker 和 Chrome/Chromium

javascript - 从网站按钮运行 chrome 应用程序

javascript - Chrome 同步文件系统和应用 ID

google-chrome-app - 如何以编程方式访问chrome应用程序安装目录?

javascript - 通过 JSON 进行搜索并在 HTML 页面中显示结果

javascript - 如何从数组中查找最大数量,但仅从 javascript 中的选定元素中查找

google-chrome - 找不到已安装的 manifest.json 用于 chrome 扩展

javascript - 当 select 标签具有 size 属性时,HTML Select change 事件在 Chrome 中的滚动条点击时触发