Google Chrome 应用程序:Web 视图行为

2024-01-10

在研究一个问题时<iframe>在 Chrome 扩展中,<webview>Chrome Apps 引起了我的注意并引起了我的兴趣。

所以我决定做一个我面临的问题的小例子<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
  });
});

清单.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>

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

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

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

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

我的主要问题/疑问是围绕行为,因为它们实际上在单独的进程中运行,为什么它没有与浏览器窗口相同的行为,例如,为什么该 webview 阻止其他人工作/渲染,它是有意的吗按原样工作?我是否应该做一些解决方法来检测一段时间后的网络视图是否未完成以跳过加载并让其他加载,以便我可以返回到慢速视图?

先感谢您。


Webviews run in a different process than your app, but they run in the same process of each other in the same partition. If you don't specify a partition attribute, they will be in the same, default one. If you check the Chrome Task Manager (shift+esc) you will see: enter image description here

(注意进程 ID 列)

如果您使用 tag 属性将每个 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 现在都在自己的进程中运行:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Chrome 应用程序:Web 视图行为 的相关文章

随机推荐

  • 有没有办法以编程方式确定图像链接是错误的?

    在我正在处理的网站中 显示的图像并不总是 显示 因为链接可能是坏的或过时的 或其他什么 你可以在这里看到它 为什么我的动态 HTML 看起来是随机放置的 https stackoverflow com questions 17689644
  • 在 Facebook 上分享的人员列表

    我已经搜索文档有一段时间了 但似乎找不到实现此目的的方法 这些信息是公开的 在 Facebook 页面上 链接显示 查看所有 股 但我似乎找不到通过 FQL 或图形 API 访问此信息的方法 我知道我可以获得给定帖子的点赞列表 https
  • Haskell 中“undefined”的类型签名意味着什么?

    我是 Haskell 的初学者 我对undefined函数的类型签名 我期望有更简单的东西 但我在 Hackage 上发现了这个 undefined forall r RuntimeRep forall a TYPE r HasCallSt
  • 自引用表 SQL 查询

    我有一个有四列的表格id name designation manager id 表架构 CREATE TABLE Employee Information id INTEGER PRIMARY KEY AUTOINCREMENT NOT
  • excel中的数组改变字符串的格式

    我想要分离图像中的数据 图像中的代码一旦到达分号和缩进就不会分开 我想将这些单词分离到一张新纸上 以便我将在数组中搜索某些单词 谢谢您的帮助 下面的代码不仅会分割数据 还会复制格式 这似乎是您想要的 假设数据位于 A 列 Option Ex
  • Windows Phone 8.1 API

    有 Windows Phone 8 1 API 可供参考吗 这是因为我想开发Windows Phone 8 1应用程序 但我不知道在哪里引用API 因为Windows Phone 8 1和8有很大的不同 所以我无法引用Windows Pho
  • 点击即可从 SwiftUI 小部件执行深层链接

    我有一个带有两个文本的简单小部件 中等大小 我想要的是能够执行深层链接以引导用户到我的应用程序的特定部分 但我似乎找不到一种方法这样做 我写的视图 很简单 HStack Text FIRST ITEM Spacer Text SECOND
  • liquibase <插入> :插入当前日期

    我正在尝试使用 liquibase 插入标签插入数据 当我向 value tag 输入数字时 它工作正常 但我正在寻找一个简单的函数来处理默认日期 数据库的当前日期时间 即使我没有将它作为表定义的一部分 Eg
  • 如何将 null 传递给需要 long 或 int 的方法?

    可能是个愚蠢的问题 但我怎样才能通过null到需要的方法long or int Example TestClass public void iTakeLong long id public void iTakeInt int id 现在我如
  • MicroProfile 指标在 Wildfly 25 上不显示自定义指标

    我正在尝试 Javax JaxRs 并且使用的是 WildFly 25 服务器 我对此不太熟悉 在搜索类似于 Spring 的 Actuator 的东西时 我偶然发现了服务器默认公开的指标和运行状况端点 以及它向应用程序端点添加自定义计数器
  • Ember:点击时动态添加输入字段并读取新数据

    我有一个页面 向用户展示几个问题并提供答案的输入字段 我还有一个按钮添加问题 单击此按钮后 他可以在新的输入字段中输入问题 然后单击 保存 所以我需要的是 当他保存时 新输入的问题也应该显示在已经显示的问题附近 所以我对模型有疑问 impo
  • 使用 Ecto 的时间戳向现有表添加时间戳

    这已被问到这里如何使用 Ecto 的时间戳向现有表添加时间戳 https stackoverflow com questions 35744390 how to add timestamps to an existing table wit
  • 未经检查的“java.util.ArrayList”分配

    我收到警告 未经检查的将 java util ArrayList 分配给 java util ArrayList for private ArrayList
  • 6.0.1 和表更改“UILabel?没有名为“text”的成员

    我正在研究 Swift 表演示 所有这些演示在 6 0 1 下似乎都有相同的错误消息 不知道如何解决这个问题 尝试这个 cell textLabel text self tableData indexPath row 并在此处阅读有关可选选
  • Firefox 不会显示 2 行文本区域的滚动条

    如果我设置高度以便实际只显示两行 则 Firefox 将不会在 2 行文本区域中显示滚动条 我必须让它足够大才能显示下面一行的一部分 有人解决过这个问题吗 我创建了一个jsfiddle http jsfiddle net briank AT
  • 如何通过编程更改 NSTextView 的文本值来实现撤消/重做?

    我创建了一个带有 NSTextView 和按钮的简单演示应用程序 为 textView 提供了 NSTextViewDelegate 并添加了一个操作 IBAction actionButtonClicked id sender NSStr
  • AngularJS 1.3 - 日期选择器初始格式不正确

    我昨天开始使用 AngularJS 1 3 发现一个问题是 Datepicker 中的初始日期不是定义的格式 日期格式正确after选择一个日期 AngularJS 1 2 10 的初始格式是正确的 如示例中注释掉 script 标签所示
  • 获取 Entity Framework 7 中修改对象的列表

    我很困惑 升级到 Entity Framework 7 并且我通常会覆盖里面的 SaveChangesDbContext能够在更改之前获取所有已修改对象的列表 最终 我有一个脚本可以跟踪数据库中的先前版本 在 Entity Framewor
  • 在 MapView 中的地图标记上方显示弹出窗口

    我不敢相信没有简单的方法可以做这样的基本事情 我想在用户单击地图标记后显示一个弹出窗口 气球 LinearLayout 类似于 Google 地图应用程序中的内容 当用户滚动地图时 它应该随地图移动 做这个的最好方式是什么 一种想法是在我的
  • Google Chrome 应用程序:Web 视图行为

    在研究一个问题时在 Chrome 扩展中