Javascript 如何在window.fbAsyninit中调用js函数
我正在开发一个facebook应用程序。我有下面的代码,如果我像这样运行它,它可以很好地工作Javascript 如何在window.fbAsyninit中调用js函数,javascript,jquery,facebook,facebook-javascript-sdk,Javascript,Jquery,Facebook,Facebook Javascript Sdk,我正在开发一个facebook应用程序。我有下面的代码,如果我像这样运行它,它可以很好地工作 <div id="fb-root"></div> <script> window.fbAsyncInit = function() { FB.init({ appId : '<?php echo $facebook->getAppId(); ?>', sessi
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '<?php echo $facebook->getAppId(); ?>',
session : <?php echo json_encode($session); ?>,
status : true,
cookie : true,
xfbml : true
);
$('#stgame').click(sendRequest);
function sendRequest() {
document.getElementById('gameSetup').style.display = 'block';
FB.ui({
method: 'apprequests',
message: '<?=$me[name];?> has invited you to a fun game of Towers. To play, just click on accept. Towers is a "3D" tile stacking word game.',
},
function (response) {
if (response && response.request_ids) {
var requests = response.request_ids.join(',');
$.post('handle_requests.php',{uid: <?php echo $uid; ?>, request_ids: requests},function(resp) {
window.location.replace("play.php?" + resp);
});
} else {
document.getElementById('gameSetup').style.display = 'none';
}
});
return false;
}
};
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
但是,我需要修改它,以便可以向sendRequest发送一个变量,并将触发器更改为内联onClick
为此,我在页面上创建了如下链接:
<a><img src=/images/start.png onClick=sendRequest('1234556');></a>
<a><img src=/images/start.png onClick=sendRequest('123');></a>
<a><img src=/images/start.png onClick=sendRequest('456');></a>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '<?php echo $facebook->getAppId(); ?>',
session : <?php echo json_encode($session); ?>,
status : true,
cookie : true,
xfbml : true
}
);
function sendRequest(opponent) {
document.getElementById('gameSetup').style.display = 'block';
FB.ui({
method: 'apprequests',
to:opponent,
message: '<?=$me[name];?> has invited you to a fun game" tile stacking word game.',
},
function (response) {
if (response && response.request_ids) {
var requests = response.request_ids.join(',');
$.post('handle_requests.php',{uid: <?php echo $uid; ?>, request_ids: requests},function(resp) {
window.location.replace("play.php?" + resp);
});
} else {
document.getElementById('gameSetup').style.display = 'none';
}
});
return false;
}
};
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
并将sendRequest函数更改为sendRequestvariable,以便它可以接受该变量
但是,当我这样做时,每次单击带有onClick触发器的按钮时,它都会给我一个错误:找不到变量sendRequest
我认为这是因为onClick无法看到sendRequest函数
所以我的问题是,如何从onClick调用这个函数。请记住,页面上有多个按钮需要调用函数,并在每个按钮上为函数提供不同的变量值
我当前的代码如下所示:
<a><img src=/images/start.png onClick=sendRequest('1234556');></a>
<a><img src=/images/start.png onClick=sendRequest('123');></a>
<a><img src=/images/start.png onClick=sendRequest('456');></a>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '<?php echo $facebook->getAppId(); ?>',
session : <?php echo json_encode($session); ?>,
status : true,
cookie : true,
xfbml : true
}
);
function sendRequest(opponent) {
document.getElementById('gameSetup').style.display = 'block';
FB.ui({
method: 'apprequests',
to:opponent,
message: '<?=$me[name];?> has invited you to a fun game" tile stacking word game.',
},
function (response) {
if (response && response.request_ids) {
var requests = response.request_ids.join(',');
$.post('handle_requests.php',{uid: <?php echo $uid; ?>, request_ids: requests},function(resp) {
window.location.replace("play.php?" + resp);
});
} else {
document.getElementById('gameSetup').style.display = 'none';
}
});
return false;
}
};
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
如果有人能告诉我如何调用这个函数,我将不胜感激。据我所知,函数需要留在窗口内,fbAsyninit函数才能实际工作
任何帮助都将不胜感激。我认为问题在于sendRequest方法在函数范围内,因此在dom可以访问它的全局命名空间中不可用。您可以尝试更改:
function sendRequest()...
到
我还应该提到,几乎没有一个很好的理由像这样将事件直接附加到dom。即使在使用php等模板语言呈现JavaScript变量数据的情况下,最好以关联方式设置变量值,这样就不会将事件耦合到dom,而是可以将数据耦合到元素。首先,我还没有看过你所有的代码,但我真的认为你应该在格式和逻辑上做更多的努力 无论如何,切中要害: 您可以有一个仅在加载JS-SDK时才会设置为true的标志,并且您可以在设置该标志之前阻止window.fbAsyninit之外的任何进程。比如:
<div id="fb-root"></div>
<script>
var isLoaded = false;
window.fbAsyncInit = function() {
isLoaded = true;
...
...
}
function myFunc(myVar) {
if(isLoaded) {
// Do FB related stuff
}
}
尝试使用站点格式而不是标记