如何使用Javascript动态修改fb:request-form的内容?

时间:2010-01-01 10:19:16

标签: javascript facebook fbml xfbml fbrequest-form

我想使用javascript自定义我的请求表单内容。 说我在我的HTML中有这个......

<div id="invite">
<fb:serverfbml style="width: 600px; height: 650px;">
    <script type="text/fbml">
        <fb:request-form 
            action="index.php"
            method="POST"
            invite="true"
            type="MyApp"
            content="Please have a look at my new __DYNAMICNAME_HERE__. 
                <fb:req-choice url='http://apps.facebook.com/myapp/' label='View Now!' />" >

            <div class="clearfix" style="padding-bottom: 10px;">
                <fb:multi-friend-selector condensed="true" style="width: 600px;" />
            </div>
            <fb:request-form-submit /></fb:request-form>
    </script>
</fb:serverfbml></div>

我想通过Javascript动态地将_DYNAMICNAME_HERE_更改为其他内容。

以下是我尝试过的事情。

function technique1()
{
   var elem = document.getElementById("invite");
   elem.innerHtml = elem.innerHTML.replace("__DYNAMICNAME_HERE__", "MyName");
   // show div code...

   // result is, the current page get's re-rendered inside the div, instead of the FB controls.
}

function technique2()
{
   // Delete all code inside the div... then construct the content using javascript.

   var elem = document.getElementById("invite");
   elem.innerHtml = text;// text is the div innerHtml code constructed at runtime.

   // run show div code
   // result is nothing shows.
}

function technique3()
{
   // First, we remove all code from the div
   // put them into another php page called invite.php

   var elem = document.getElementById("invite");
   elem.innerHtml = "<iFrame src=\"www.myserver.com/invite.php?name=myname\"></iFrame>";

   // run show div code
   // It works but requires 1 more request to the server.
}

有没有人知道一种不涉及对服务器的额外请求的技术(invite.php)?可能涉及FB.XFBML.Host.addElement,刷新等......

不过,我正在使用谷歌的Closure手柄弹出div。

感谢。

2 个答案:

答案 0 :(得分:1)

我也遇到了同样的问题,并以teepark建议的方式解决了这个问题。 我无法更改facebook标签的HTML,因为它们在iframe中呈现。 我的页面在www.____.com,iframe在www.facebook.com。由于跨域策略,我无法更改该iframe中的内容。

答案 1 :(得分:0)

实际上它被设计为允许这种操作。你可以做的一件事是渲染多个fb:request-form,其中大部分都在&lt; div&gt; s with style =“display:none”,然后更改使用javascript显示哪一个。

这是一个有限的解决方案,因为它为您提供了必须在渲染时确定的有限选择,但AFAIK一旦渲染就无法获得html属性。