Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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 在Firefox插件中验证facebook用户_Javascript_Facebook_Authentication_Firefox Addon - Fatal编程技术网

Javascript 在Firefox插件中验证facebook用户

Javascript 在Firefox插件中验证facebook用户,javascript,facebook,authentication,firefox-addon,Javascript,Facebook,Authentication,Firefox Addon,我正在尝试编写一个Firefox插件,用于访问facebook上的数据。 现在我不知道如何获得访问令牌。 我尝试为桌面应用程序实现客户端流(使用固定的重定向uri),但我在那里遇到的最大问题是JavaScript不允许我等待重定向发生。 你知道怎么做吗 据我所知,因为我没有网页,JavaScript API没有多大帮助,对吧?我想你正在打开https://www.facebook.com/dialog/oauth在浏览器选项卡中,允许用户登录并授予您访问权限。你不需要在这里传递一个有效的重定向U

我正在尝试编写一个Firefox插件,用于访问facebook上的数据。 现在我不知道如何获得访问令牌。 我尝试为桌面应用程序实现客户端流(使用固定的重定向uri),但我在那里遇到的最大问题是JavaScript不允许我等待重定向发生。 你知道怎么做吗


据我所知,因为我没有网页,JavaScript API没有多大帮助,对吧?

我想你正在打开
https://www.facebook.com/dialog/oauth
在浏览器选项卡中,允许用户登录并授予您访问权限。你不需要在这里传递一个有效的重定向URL,你可以使用一些肯定不起作用的东西,比如
http://my.extension.local/
。然后,您只需要检测选项卡何时被重定向到该URL。如果您有一个经典扩展名,您可以在该选项卡的
元素上注册一个,并查看
onLocationChange()
调用-一旦您看到一个以
http://my.extension.local/
您可以取消请求并关闭选项卡,必要的数据在URL中。如果使用,可以将
ready
事件侦听器附加到选项卡上,如下所示:

var tabs = require("tabs");
tabs.open({
  url: "https://www.facebook.com/dialog/oauth?...",
  inBackground: false,
  onReady: function(tab)
  {
    if (tab.url.indexOf("http://my.extension.local/") == 0)
    {
      ...
    }
  }
});

“JavaScript API”是什么意思?还是一个经典的基于XUL的扩展?我指的是facebookNo提供的,JavaScript SDK没有多大帮助-由于安全问题,您无法将其加载到扩展中。好的,我有一个常规扩展并尝试了:
var facebook={init:function(){var app_id='MY app id';var redirect_uri='fb.com/login_success'var url='https://www.facebook.com/dialog/oauth?...'window.open(url);window.addEventListener(“加载”,函数(){browser.addProgressListener(fbListener,Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);},false);}
但从未调用过代码。我也尝试过只监听页面加载,但也不起作用。@wiseveri:所以您正在打开一个新窗口,但没有保留对它的引用。相反,您会监听所处窗口的“加载”事件(当然不会发生,因为该窗口已加载)。如果该事件假设触发,则您正在尝试访问名为
browser
的变量,当然该变量在任何地方都没有定义。呵呵……正是……将其更改为:
var myWindow=window.open(url);myWindow.addEventListener('load',function(){gBrowser.addProgressListener(myListener);},false);
还是什么都没有。我如何访问新窗口的
元素?我的方法显然不起作用。进度侦听器和浏览器元素上的页面没有帮助。这是一个闭包-您正在访问自己窗口的
gBrowser
变量。请使用
myWindow.gBrowser