Chrome 打包应用程序无法打开同一窗口错误

Posted

技术标签:

【中文标题】Chrome 打包应用程序无法打开同一窗口错误【英文标题】:Chrome Packaged Application Can't Open Same-Window Error 【发布时间】:2013-09-19 15:34:33 【问题描述】:

我正在开发简单的 Chrome 打包应用程序。我是 chrome 应用程序开发的新手。运行应用程序时出现错误。

错误信息是:无法打开指向“chrome-extension://ckikacajammagdadocdkmcoecilafkgl/index.html”的同窗口链接;试试 target="_blank"。

索引 html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>My first Chrome App</title>
    <script src="jquery-1.10.2.min.js"></script>
    <script src="custom.js"></script>
</head>
<body>
    <button id="btnTest" value="Test" style="width: 200px; height: 40px">TEST</button>
    <br />
    <input type="text" id="txtTest" />
    <div id="divMovies" style="width: 100%;">
        <br />
        Url : 
    </div>
</body>
</html>

custom.js:

$(document).ready(function () 
    save(load);
);

function save(callback) 
    var channel = "Test local storage item test";
    chrome.storage.local.set( 'channel': channel );
    callback();

function load() 
    var channelss = "";
    chrome.storage.local.get('channel', function (result) 
        channelss = result;
    );
    document.getElementById("txtTest").value = channelss.channel;

manifest.json:


  "manifest_version": 2,
  "name": "Dizi Takip App",  
  "version": "1",
  "app": 
    "background": 
      "scripts": ["main.js"]
    
  ,
  "icons":  "128": "icon.png" ,
  "offline_enabled": true,
  "permissions": [
    "storage"
  ]

main.js:

chrome.app.runtime.onLaunched.addListener(function() 
  chrome.app.window.create('index.html', width: 500, height: 309);
);

怎么了?

【问题讨论】:

我们唯一能看出你做错的事情是你没有包含导致错误的代码。控制台错误消息是否包含文件和行号? index.html 的内容是什么? manifest.json 的内容是什么?哪个文件指的是这个“自定义 js 文件”?等等。 您好,谢谢您的回答。我编辑了我的问题并添加了我所有的简单应用程序文件。那么有什么问题呢? 在customjs文件document.getElementById("txtTest").value = channelss.channel line上报错 一个可能的问题是给出错误的行将在将“result”分配给“channelss”的行之前执行。 (至少,有时会;你不能确定,因为它是异步的。)你是有意的吗?为什么将“结果”的赋值和使用分开? 【参考方案1】:

chrome.storage.*.setchrome.storage.*.get 都是异步 API(正如 sowbug 所指出的)。因此,您需要将 custom.js 更改为如下所示:

function save(callback) 
    var channel = "Test local storage item test";
    chrome.storage.local.set( 'channel': channel , function() 
        callback();
    );


function load() 
    chrome.storage.local.get('channel', function (result) 
        document.getElementById("txtTest").value = result.channel;
    );

但是,您提到的错误对于此应用没有任何意义,并且绝对与 custom.js 中的问题无关。如果您的应用在其 HTML 代码中包含没有 target='_blank' 属性的链接,并且用户单击了该链接,您通常会看到此错误。应用程序没有内置的窗口内导航概念,因此禁止此类链接。您可以为链接指定 target='_blank' 并让它在用户的默认浏览器(不一定是 Chrome!)中打开一个新选项卡/窗口,或者向链接添加一个 onclick 处理程序并在那里做一些更有趣的事情。

我根据您的来源重新创建了您的应用程序,它开箱即用,除了 txtTest 在没有上述更改的情况下说“未定义”。但是在任何地方都没有报告错误(任何错误)。但是,我没有使用 jQuery。相反,我在 custom.js 中使用以下内容来启动序列:

onload = function () 
    save(load);
;

如果您可以通过 $(document).ready 验证您收到错误,而通过 onload 没有收到错误,请告诉我们。

【讨论】:

我用你的代码改变了 custom.js,我没有改变 $(document).ready 块。你是一生的救星。非常感谢!【参考方案2】:

chrome.app.window.create 需要清单中的“app.window”权限

【讨论】:

在某种程度上,您是对的:chrome.app.window.* API 确实需要“app.window”权限。但是,该权限目前对所有 Chrome 打包的应用程序都是隐含的,也就是说,它会为所有应用程序隐式注入,并且您不必在清单中明确指定它(尽管您可以,并且不会产生错误)。 developer.chrome.com/apps/app_window.html 的公共文档对此有点落后,但很快就会修复。

以上是关于Chrome 打包应用程序无法打开同一窗口错误的主要内容,如果未能解决你的问题,请参考以下文章

由于打包失败造成项目无法启动,报错:找不到程序包

Chrome 中的 iframe 错误:无法从“窗口”读取“localStorage”:此文档的访问被拒绝

Puppeteer 无法打开 chrome(出现错误)

使用Chrome浏览器浏览网页时内容无法正常显示怎么办?

chrome无法启动怎么办

CRX文件无法打开,按照指示使用chrome浏览器也无法打开,求解!