Javascript 通过bookmarklet使用facebookapi

Javascript 通过bookmarklet使用facebookapi,javascript,facebook-graph-api,web-applications,bookmarklet,Javascript,Facebook Graph Api,Web Applications,Bookmarklet,我正在尝试开发一个bookmarklet,它可以抓取用户当前的网页并存储从中提取的一些数据。在我自己的网站上,我的用户通过Facebook API登录 使用my bookmarklet时,我可以成功呈现Facebook登录模式,但API中的登录会引发异常: 指定的URL不属于应用程序 我是新手,但这大概是因为访问bookmarklet的当前页面与我自己的域不匹配 我正在从托管在该域上的外部文件运行javascript—这还不够吗 或者,我如何获得此地址?不幸的是,我不能提供我自己的帐户管理功能,

我正在尝试开发一个bookmarklet,它可以抓取用户当前的网页并存储从中提取的一些数据。在我自己的网站上,我的用户通过Facebook API登录

使用my bookmarklet时,我可以成功呈现Facebook登录模式,但API中的登录会引发异常:

指定的URL不属于应用程序

我是新手,但这大概是因为访问bookmarklet的当前页面与我自己的域不匹配

我正在从托管在该域上的外部文件运行javascript—这还不够吗

或者,我如何获得此地址?不幸的是,我不能提供我自己的帐户管理功能,我依赖Facebook进行用户管理


欢迎提供任何解释和创意。

解决方案是在当前页面的iframe中,或在新选项卡或新弹出窗口中,在您自己的域中主持登录步骤。不管怎么说,任何不那么安全的东西都太不安全了

可能的步骤:

  • Bookmarklet运行并刮取数据
  • Bookmarklet使用src=”创建iframehttp://yourdomain.com/bookmarklet-widget?data=...."
  • 如果尚未登录,则小部件内容页首先需要登录步骤
  • 如果使用GET提交的数据太大,可以使用POST。步骤就像

  • Bookmarklet运行并刮取数据
  • Bookmarklet创建名为“mywidgetframe”的空iframe
  • Bookmarklet使用method=post target=mywidgetframe和action=http://yourdomain.com/bookmarklet-widget"
  • Bookmarklet提交表单
  • 如果尚未登录,则小部件内容页首先需要登录步骤

  • 如果您需要在iframe/窗口和当前父页面之间进行直接通信,请查看

    “我正在从承载在该域上的外部文件运行javascript-这还不够吗?”–不。因为这只是加载脚本的地方,但它会在当前文档的上下文中执行。我明白了,谢谢也许我需要清理数据,在我的域名(ugh)上打开一个新标签,然后从那里提交?希望有人能提出更优雅的建议。谢谢你,这很有帮助。我还发现下面的链接很有用,你的链接让我注意到了我犯的一个错误。我共享的enable cors链接与跨站点iframe通信无关。它是关于启用跨站点AJAX的。对于跨站点iframe通信,请查看函数“postMessage”。在你分享的链接中,他/她使用了“giftyHandleMessage”中一种过时的技术。对于非常简单的情况,也可以。它有在旧浏览器中工作的优点,但也有缺点,例如可能破坏使用散列片段存储状态的网页。