Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.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 执行动态添加的社交网络小部件_Javascript_Html_Facebook_Liferay_Facebook Javascript Sdk - Fatal编程技术网

Javascript 执行动态添加的社交网络小部件

Javascript 执行动态添加的社交网络小部件,javascript,html,facebook,liferay,facebook-javascript-sdk,Javascript,Html,Facebook,Liferay,Facebook Javascript Sdk,我目前正在Liferay 6.2中开发一个portlet。在Portlet配置中,我存储社交网络名称及其脚本(由不同的社交网络提供的脚本,如Facebook、Twitter等) 对于公共portlet,我有不同的选项卡,每个存储的社交网络对应一个选项卡(因此它们的数量是可变的)。当我最初加载portlet时,我在显示Facebook页面插件方面没有问题,但是当我开始更改选项卡时,出现了一个问题。我带来了社交网络脚本(html+脚本标签) 我知道,如果插入这些代码,脚本标记将不会被执行,因此我不会

我目前正在Liferay 6.2中开发一个portlet。在Portlet配置中,我存储社交网络名称及其脚本(由不同的社交网络提供的脚本,如Facebook、Twitter等)

对于公共portlet,我有不同的选项卡,每个存储的社交网络对应一个选项卡(因此它们的数量是可变的)。当我最初加载portlet时,我在显示Facebook页面插件方面没有问题,但是当我开始更改选项卡时,出现了一个问题。我带来了社交网络脚本(html+脚本标签)

我知道,如果插入这些代码,脚本标记将不会被执行,因此我不会在portlet上加载插件,只有html。如果我对脚本进行eval(),则Facebook脚本根本不起作用,并且不会显示任何错误。如果我用自己的代码更改Facebooks脚本标记,然后eval()它,它会工作,但如果我继续使用Facebooks代码,什么也不会发生

A.io.request(portletURL.toString(),{
            on: {
              success: function() {
                var data = this.get('responseData');
                var cont = document.getElementById('contenedor-script');
                document.getElementById('contenedor-script').innerHTML = data;
                var arr = document.getElementById('contenedor-script').getElementsByTagName('script')
                for (var n = 0; n < arr.length; n++){
                    console.log(arr[n].innerHTML);
                    eval(arr[n].innerHTML) //this executes the script tag
                }
              }
            }
          });
A.io.request(portletURL.toString(){
关于:{
成功:函数(){
var data=this.get('responseData');
var cont=document.getElementById('contendor-script');
document.getElementById('contendor-script')。innerHTML=data;
var arr=document.getElementById('contendor-script').getElementsByTagName('script'))
对于(变量n=0;n
现在插入的脚本出现了:

<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/es_ES/sdk.js#xfbml=1&version=v2.7";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>


<div class="fb-page" data-href="https://www.facebook.com/facebook" data-tabs="timeline" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"><blockquote cite="https://www.facebook.com/www.oviedo.es/" class="fb-xfbml-parse-ignore"><a href="https://www.facebook.com/www.oviedo.es/">Facebook</a></blockquote></div>

(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id))返回;
js=d.createElement;js.id=id;
js.src=“//connect.facebook.net/es#es/sdk.js#xfml=1&version=v2.7”;
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);
当不计算函数时,将显示html标记

我的另一种选择是加载所有的标签,并开始显示和隐藏它们与CSS,但这是一个更糟糕的想法


谢谢。

您需要使用
FB.XFBML.parse()
再次解析插件:

在浏览器中呈现元素后立即调用该函数,JavaScript SDK将解析/显示这些元素


顺便说一句,当然,您应该只加载JSSDK一次。永远不要使用“eval”…

eval
只是一个问题,如果我开始添加其他社交网络,它会起作用吗?我是说,不仅仅是Facebook。因为我试过使用Facebook,它运行得很好,但在添加了Twitter脚本后,它似乎无法使用Twitter。我所寻找的是一种适用于所有社交网络的通用方法,我发现的只是特定的解决方案。FB.XFBML.parse当然只适用于facebook插件。这是JavaScript SDK中的一种方法。其他平台可能有不同的解决方案。没有通用的方法。