在Chrome扩展程序中使用DDP

时间:2016-09-17 19:09:27

标签: meteor google-chrome-extension ddp

在我正在构建的Chrome扩展程序中,我想从扩展程序弹出窗口连接到Meteor服务器,以进行用户注册,登录和

我从2014年Meteor Spotting发现了一个简短的解释,表明可以使用ddp.js执行此操作,但它描述的项目似乎已经消失。

当前版本的ddp.js使用了import语句,Chrome会反对这些语句。我的理解是这些脚本是为Node.js设计的。我应如何编辑这些脚本,以便它们可以在Meteor Spotting文章中描述的Chrome扩展程序中使用?

或者,是否有任何一个简单的Chrome扩展程序的示例,它通过DPP与一个简单的Meteor服务器连接,我可以用它作为灵感?

1 个答案:

答案 0 :(得分:3)

我找到了自己的解决方案。以下是从Chrome扩展程序调用Meteor服务器的简单实现:

的manifest.json     {       “manifest_version”:2

, "name": "DDP Test"
, "version": "0.1"

, "background": {
    "scripts": [
      "jquery-3.1.0.js"
    , "meteor-ddp.js"
    , "meteor.js"
    , "background.js"
    ]
  }
}

可以找到jquery-3.1.0.js here
可以找到eddfirs meteor-ddp.js here

meteor.js(改编自Meteor Spotting

var Meteor 

;(function meteor(){
  "use strict"

  var endpoint = "ws://localhost:3000/websocket"
  // Use your own endpoint ^^^

  Meteor = {
    call : function(){
      var args = [].slice.call(arguments)
      var methodName = args.shift()
      var callback = args.pop()
      var ddp = new MeteorDdp(endpoint)
      if (!(callback instanceof Function)) {
        args.push(callback)
        callback = function (error, data) {
          console.log("Result of "+methodName+" call:", error, data)
        }
      }

      ddp.connect().done(MeteorCall)

      function MeteorCall() {
        console.log('Connected!');

        var $deferred = ddp.call(methodName, args)
        $deferred.done(function (result) {
          callback(null, result)
        })
        $deferred.fail(function (error) {
          callback(error)
        })
      }
    }
  };
})()

background.js

;(function background(){
  "use strict"

  Meteor.call("test", 1, "two", { three: [4]})
  Meteor.call("test", "using", "a", "custom", callback)

  function callback(error, result) {
    console.log("Custom callback error:", error, ", Result:", result)
  }
})()

加载扩展程序时在服务器控制台中输出:

I20160917-19:35:19.352(-4)? test 1 two { three: [ 4 ] }
I20160917-19:35:19.377(-4)? test using a custom

在Inspector中输出背景视图:

Connected!
meteor.js:18 Result of test call: null test method activated with arguments {"0":1,"1":"two","2":{"three":[4]}}
meteor.js:25 Connected!
background.js:8 Custom callback error: null , Result: test method activated with arguments {"0":"using","1":"a","2":"custom"}