Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌浏览器应用程序:网络视图行为_Javascript_Google Chrome_Google Chrome App_Behavior_Google Chrome Webview - Fatal编程技术网

Javascript 谷歌浏览器应用程序:网络视图行为

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应用程序中的
吸引了我的眼球并引起了我的兴趣

所以我决定做一个小例子来说明我在
上面临的问题,看看
是否能解决它。根据我对Chrome开发者视频的理解,
webview
与你的应用程序在一个单独的过程中运行;它没有与你的应用程序相同的权限。因此,我假设如果运行中的内容以某种方式与“主线程”(应用程序)分离,我猜它们的内容将彼此独立执行,不会阻塞应用程序或其他应用程序,以防它们中的任何一个可能有一个长时间运行的js executon。因此,我做了以下工作:

background.js manifest.json window.html

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

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

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

  • 如果我只加载前3个网页,加载速度很快,并且“同时”出现
  • 如果我按原样加载所有网页,我会看到前3个页面加载,最后一个页面加载,因为它有一个很长的js执行时间,然后显示(这将是最佳行为),因为它们是不同的过程,它们不应该依赖于webview是否慢,其他人必须等待
  • 现在,如果我对第三个进行注释,刷新并执行应用程序,那么在使用longscript的应用程序完成之前,我看不到任何webview。(为什么会发生这种情况?)
  • 上面这一点是随机的,要么像我提到的那样发生,要么不是
  • 最后,让我们添加另一个
    ,对我来说将发生的是:前三个被加载,第四个正在执行,完成并显示之后,我看到第五个被渲染
  • 我的主要问题/疑问是关于行为,因为它们实际上是在一个单独的进程中运行的,为什么它没有与浏览器窗口相同的行为例如,为什么webview阻止其他窗口工作/渲染,它是否打算按原样工作?我是否应该做一些变通方法来检测一段时间后是否有一个webview没有完成,从而跳过加载并让其他人加载,这样我就可以返回到慢加载


    提前感谢您。

    网络视图运行的进程与您的应用程序不同,但它们在同一分区中彼此运行的进程相同。如果不指定分区属性,则它们将位于相同的默认分区属性中。如果您检查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>