0

我正在寻找一种方法来链接到 facebook iframe 页面中的网页

所以

http://www.facebook.com/designmystyle/app_244351832329915

会是这样的

http://www.facebook.com/designmystyle/app_244351832329915?http://www.lickmystyle.com/contact/

我已经尝试过这里的方法http://www.codingforums.com/archive/index.php/t-85547.html使用

    <script type="text/javascript">
    <!--

    function loadIframe(){
    if (location.search.length > 0){
    url = unescape(location.search.substring(1))

    window.frames["app_runner4f84331f0576e6f73380702"].location=url
    }
    }

    onload=loadI

frame
//-->

我不确定 app_runner4f84331f0576e6f73380702 是 iframe 的名称还是 ID,但它是我能找到的唯一一个宽度为 810 像素 x 800 像素的框架

关于是否可以做到的任何想法都会很棒

4

1 回答 1

1

如果它是一个 facebook 画布应用程序,那么它的 url 应该是apps.facebook.com而不是www.facebook.com

任何将添加到您的画布应用程序 url 的查询字符串参数都将由 facebook 传递到您的应用程序,方法是在画布 iframe 中加载时将其添加到您的应用程序的 url,因此,如果您将用户定向到:

apps.facebook.com/app-name?param=value

facebook 会将应用画布 iframe 发布到:

www.yourdomain.com/canvas-path?param=value

然后,您可以像获取任何其他 GET 参数一样获取该参数以及您想要的参数。不过有一件事,如果该参数是一个 url,那么它应该是 url 编码的,否则会出错。

我不明白的是你想用你想作为参数传递的url做什么,这个“app_runner4f84331f0576e6f73380702”是什么?


编辑

哦,这是一个页面选项卡,对不起,我错过了那部分。

我以前从未使用过它,但它在页面选项卡教程的最后一部分(与 Facebook API 集成)中说:

如果在加载选项卡的 URL 中的原始查询字符串中设置了 app_data 参数,您的应用程序还将收到一个名为 app_data 的字符串参数作为 signed_request 的一部分。对于上面的 Shop Now 链接,可能如下所示:“http://www.facebook.com/YourPage?v=app_1234567890&app_data=any_string_here”。如果您控制链接的生成,则可以使用它来自定义呈现的内容。

据我了解,这正是您获取数据所需要的。

但是,您将无法以您发布的方式更改 iframe 的 url,因为您无权访问父窗口(您的页面与 facebook 位于不同的域中,并且浏览器会因为交叉而阻止它-域策略)。

你能做的只是:

document.location.href = URL;

You are in your own page, doesn't matter that it resides in an iframe.

The thing is that you don't need all of that, just be aware in the server side of the parameter that is passed to you from facebook (from the query string) if such exists, and render the page according to that. There's no reason to render a page that then redirects the page to another url, when you already know what the user wants, you're just making the user make a redundant round trip to your server for nothing.

于 2012-04-10T21:18:23.957 回答