【问题标题】:Is it possible to access the current browser url from a Facebook Page Tab iframe是否可以从 Facebook 页面选项卡 iframe 访问当前浏览器 url
【发布时间】:2012-03-20 21:14:20
【问题描述】:

我有一个 facebook 页面选项卡 iframe,并希望访问浏览器 url 以获取当前 facebook 页面 url。

我知道由于浏览器安全问题,无法使用与父框架交互的 javascript。

一种不适用于所有浏览器的方法是从请求中读取 HTTP_REFERER 标头。

有没有更好的办法?

【问题讨论】:

    标签: facebook facebook-page


    【解决方案1】:

    我希望这根本不可能。否则这将是一个安全问题,可能会被关闭。

    您不应该根据损害其他用户的利益来编写代码。

    【讨论】:

    • 如果这是不可能的,那么您将无法在 Facebook 中运行仅 SSL 的应用程序(因为您无法从 HTTP 重定向到 HTTPS)
    • 重定向没有限制参见stackoverflow.com/questions/8371/…
    【解决方案2】:

    由于跨域策略,无法获取父 Frame 的 URL。并且无法获取有关您的应用程序在客户端运行的页面的信息。

    但在服务器端,您可以使用signed_request 中传递的详细信息重建页面 URL。对于页面选项卡应用程序,它包含 page:

    一个 JSON 对象,包含页面 id stringliked boolean(如果用户喜欢该页面,则设置为 true,如果不是,则设置为 false)和 admin @987654333 @(如果用户是页面管理员,则设置为true,如果不是,则设置为false)。

    使用该页面 ID,您可以构建页面 URL:

    http://www.facebook.com/pages/-/PAGE_ID
    

    如果您希望在您的应用程序中链接到您的页面选项卡,请使用:

    http://www.facebook.com/pages/-/PAGE_ID?v=app_APPLICATION_ID
    

    注意,HTTP_REFERRER 是客户端提供的,不可信,可能会被插件/代理/等切断...

    注意事项:
    页面在现实生活中可能有不同的 URL,但使用这种技术,用户将登陆正确的页面,因为 Facebook 会发出重定向到页面的正确 URL。
    示例 URL 使用 HTTP 方案,如果需要,请随时使用 HTTPS

    以 PHP 为例,您可以像这样检测当前方案:

    $scheme = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']!=="off") ||
               (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
                $_SERVER['HTTP_X_FORWARDED_PROTO']=="https")
              ) ? 'https' : 'http';
    

    【讨论】:

    • 感谢您的回答,但您的重定向只有在协议为 HTTP 时才有效。
    • 好吧,我提供了一个示例 URL,您可以随意将 HTTP 替换为 HTTPS(它也会按预期工作),您可以检测当前用户方案并使用它来代替使用硬编码的协议方案...
    • @barbolo,这仅适用于未经授权的用户。对于授权用户 Facebook 保留帐户安全设置(如果用户启用了安全浏览,他将登陆 HTTPS 服务器页面)。
    【解决方案3】:

    根据我的经验,HTTP_REFERRER 可能无法按预期工作。如果标签应用程序是为特定页面设计的(我想应该是这样),您是否尝试过重新创建它?

    https://www.facebook.com/MYPAGENAME/app_MYAPPID

    其中 MYPAGENAME 是您的页面名称,MYAPPID 是应用程序 ID,当然。

    如果标签应用于多个页面,我很确定您会从https://graph.facebook.com/PAGEID 获得相关数据以应用上述内容,其中 PAGEID 是您从signed request 获得的页面 ID .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      相关资源
      最近更新 更多