如何使用angularJS将数据从主窗口传递到chrome应用程序中新创建的窗口?

时间:2015-01-09 09:37:33

标签: javascript windows angularjs google-chrome google-chrome-app

我目前正在创建一个Chrome应用程序,只是为了娱乐和学习,然后我遇到了一个问题。在主窗口中,我创建了一个窗口,它将使用您单击的名称显示您的对话,但我不知道如何将数据传递到该新窗口。可能吗?如果那么,怎么样?这是我的代码。

    chrome.app.window.create('views/templates/chatWindow.html', {
        'bounds': {
            'width': window.screen.availWidth,
            'height': window.screen.availWidth
        },
        state: 'maximized',
        resizable: false
    });

请注意我使用的是AngularJS,我正在使用Windows机器。

另外,我有另一个问题。那个新窗口有自己的控制器,那么,我该如何获得传递的数据呢?

2 个答案:

答案 0 :(得分:2)

选项1

chrome.app.window.create的回调函数会为您提供AppWindow个对象。 此对象具有contentWindow属性,该属性是新创建的窗口中的window对象。有了这个引用,您可以在document.body对象上触发自定义事件并在控制器中处理它。

选项2

使用angular的NgRoute和URL的哈希来传递数据。例如,您可以执行以下操作:

chrome.app.window.create('views/templates/chatWindow.html#/client/1234' //...

然后使用路由器和相同的应用程序代码来处理视图和操作。

答案 1 :(得分:0)

聚会晚了一点,但是我希望这个答案可以帮助其他人解决这个问题:

如果您使用chrome.windows.createhttps://developer.chrome.com/extensions/windows#method-create)创建了子窗口,则可以使用Chrome的消息传递API将消息传递到此新创建的子窗口:

在您的父母(后台脚本)中,您可以执行以下操作:

chrome.runtime.sendmessage({
  type: "a_message_type",
  foo: "bar"
});

在子窗口的HTML内,您将具有一些类似于以下内容的代码:

<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Child Window</title>
  <script src="jquery-3.5.1.min.js"></script>
  <script src="child.js"></script>
</head>
<body>
  <p> I'm the child window </p>
</body>
</html>

在child.js内部,您可以收听来自父级的消息:

$(function () {
  chrome.runtime.onMessage.addListener(function (request) {
    if (request.type === "a_message_type") {
      console.log(request.foo); // request has the payload from the parent window
    }
  });
});