Frage

Ich habe eine JS-Funktion erstellt, die fein ausgeführt, wenn es enthalten ist eine der ‚Onclick‘ Aktion von Standard-HTML-Link-Tag wie folgt:

<a href="#" onclick="return fb_CheckPermission('publish_stream');">test</a>

Jedoch, wo ich diese Funktion wirklich verwenden will, ist auf der ‚onsubmit‘ Wirkung einer Form, aber wenn ich schließe es folgt wie die Funktion nicht mehr zu sein scheint ausführen:

<form action="page.pl" id="disable-submit" name="status-form" method="POST" onsubmit="return fb_CheckPermission('publish_stream');">

Was die ‚fb_CheckPermission ()‘ JS Funktion im Grunde tut, ist die Verwendung Facebook Connect zu überprüfen, um sicherzustellen, dass der Benutzer uns eine spezielle Erlaubnis erteilt hat, und wenn nicht, sagt er Facebook Connect den Benutzer aufzufordern, die Erlaubnis zu erteilen. Hier ist der Code für die JS-Funktion:

1. function fb_checkPermission(permission) {
2.  FB.ensureInit(function() {
3.      FB.Facebook.apiClient.users_hasAppPermission(permission, function (hasPermissions) {
4.          if(!hasPermissions){
5.              FB.Connect.showPermissionDialog(permission,function (status){
6.                  if(!status) {
7.                      if(permission == 'offline_access') {
8.                          // save session
9.                      }                       
10.                 }
11.             });
12.         }
13.     });
14. });
15.}

Was dieser Code tut, ist wie folgt:

Line 2: Make sure Facebook Connect JS library is loaded
Line 3: Checks to see if the current Facebook Connect user has granted a specific permission
Line 5: If the permission hasn't been granted then prompt the user with the permission dialog
Line 7: In the case of the 'offline_access' permission save the session key once granted

Der Benutzer Erfahrung, die ich bin versucht zu erreichen, dass, wenn ein Benutzer das Formular abschickt werde ich überprüfen, um zu sehen, ob sie eine spezifische Genehmigung erteilt hat, und wenn nicht prompt sie für die Erlaubnis, bevor Sie das Formular abschicken. Wenn der Benutzer bereits erteilt hat, sollte die Genehmigung der Form nur einreichen. Für jene Benutzer, die die Form aufgefordert werden sollte einreichen, nachdem sie wählen, ob sie die Erlaubnis erteilen, oder wenn das den Antrag verweigern, die ich die fb_checkPermission () JS Funktion glaube richtig jetzt verarbeitet. Was ich bin mir nicht sicher ist, ob es irgendeine Art von JavaScript Problem mit, wie diese Arbeiten auf Formular Vorlage.

Wie bereits erwähnt, diese JS-Funktion funktioniert perfekt als Onclick Aktion aber nicht als onsubmit Aktion so ich bin ziemlich sicher, dass dies etwas mit dem zu tun hat, wie JavaScript behandelt onsubmit Aktionen.

Ich bin stecken, damit ich wirklich Ihre Hilfe schätzen, herauszufinden, wie die JS-Funktion ändern mein gewünschtes Benutzererlebnis. Vielen Dank im Voraus für Ihre Hilfe!

War es hilfreich?

Lösung

Der Grund Ihrer „auf Anker auf“ funktioniert, ist, weil es nicht Ihre Seite nicht ändert (Standort), während alle der asynchronen Aufrufe Facebook beenden.

Wenn Sie befestigen die gleiche Funktion auf die die Funktion zurückwerfen Handler vor Facebook Sachen tatsächlich ausgeführt wird, und es tut, ohne „false“ Rückkehr der Form verursacht mit Vorlage gehen früher, als Sie es wollen.

Was Sie tun müssen, ist return „false“ am Ende Ihrer onSubmit Funktion Vorlage zu vermeiden und Zeit zu Facebook Sachen Finish zu geben und dann manuell an Stellen einreichen Form Sie wollen telefonisch eingereicht werden:

document.getElementById('disable-submit').submit();

(Der Handler wird nicht aufgerufen werden, wenn submittion aus dem Skript ausgelöst wird.)

Leider habe ich nicht Facebook SDK zur Hand, damit ich den Code nicht schreiben kann, dass ich sicher funktioniert 100%, aber es ist etwas in diese Richtung:

function onSubmit () {
    doStuffAsynchronously(function () {
        if (everythingIsOK) {
            // proceed with submission
            document.getElementById('formId').submit();
        }
    });

    return false;
}

Andere Tipps

Versuchen Sie, den JavaScript-Aufruf am Eingang setzen Sie das Absenden verwenden einzuleiten.

Ich denke, im Grunde genommen, dass Ihr Browser Standardvalidierungsformular (page.pl / Methode POST) zu tun, anstatt zu verwenden, neigt dazu, was Sie denken, es tut Versuchen Sie, diese

<form action="page.pl" id="disable-submit" name="status-form"
      method="POST" onsubmit="returnFbChPermissionAndPreventDefaultAction();">
    <script type="text/javascript">
        var returnFbChPermissionAndPreventDefaultAction = function(){ 
           //prevent default
           if (event.preventDefault) { 
               event.preventDefault(); 
           } 

           //specific for IE
           valueOfreturn = fb_CheckPermission('publish_stream');
           event.returnValue = valueOfreturn;
           return event.returnValue ; 
        }
    </script>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top