Question

Je travaille sur une extension de navigateur à l'aide de CrossRider.J'ai besoin d'envoyer des données de popup à l'extension.js

Mon code de popup

<!DOCTYPE html>
<html>
<head>
<!-- This meta tag is relevant only for IE -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">

<script type="text/javascript">
/************************************************************************************
  This is your Popup Code. The crossriderMain() code block will be run
  every time the popup is opened.

  For more information, see:
  http://docs.crossrider.com/#!/api/appAPI.browserAction-method-setPopup
*************************************************************************************/

function crossriderMain($) {
  // var to store active tab's URL
  var activeTabUrl = null;

  // Message listener for response from active tab
  appAPI.message.addListener(function(msg) {
    if (msg.type === 'active-tab-url') activeTabUrl = msg.url;
  });

  // Request URL from active tab
  appAPI.message.toActiveTab({type: 'active-tab-url'});

    alert(activeTabUrl);
  // THE REST OF YOUR CODE
}
</script>

</head>
<body>

Hello World

</body>
</html>

code d'extension.js

appAPI.ready(function($) {
  // Message listener
  appAPI.message.addListener(function(msg) {
    if (msg.type === 'active-tab-url')
      // Send active tab's URL to popup
      appAPI.message.toPopup({
        type: 'active-tab-url',
        url:encodeURIComponent(location.href)
      });
  });

  // THE REST OF YOUR CODE
});

La valeur de Activetaburl n'est pas mise à jour.Cela donne une valeur null. P.S: Je suis capable de communiquer entre fond.js et popup.Mais pour une raison quelconque, appapi.message.ActAbettab fonction ne fonctionne pas pour moi.Où je fais l'erreur?

fond.js (éditer)

var tabUrl='';
 /* appAPI.tabs.getActive(function(tabInfo) {
        tabUrl = tabInfo.tabUrl;
        }); */
 appAPI.message.addListener(function(msg) {
        appAPI.tabs.getActive(function(tabInfo) {
        tabUrl = tabInfo.tabUrl;
        });
       var dataString = '{"url":"'+tabUrl+'","access":"'+msg.access+'","toread":"'+msg.toread+'","comment":"'+msg.comment+'"}';
     alert(dataString);
     appAPI.request.post({
        url: 'REST API URL',
        postData: dataString,
        onSuccess: function(response, additionalInfo) {
            var details = {};
            details.response = response;
            appAPI.message.toPopup({
            response:response
        });

        },
        onFailure: function(httpCode) {
        //  alert('POST:: Request failed. HTTP Code: ' + httpCode);
        }
    });
  });

Code de travail de fond.js

appAPI.message.addListener(function(msg) {
    appAPI.tabs.getActive(function(tabInfo) {     
       var dataString = '{"url":"'+tabInfo.tabUrl+'","access":"'+msg.access+'","toread":"'+msg.toread+'","comment":"'+msg.comment+'"}';
    // alert(dataString);
     appAPI.request.post({
        url: 'http://fostergem.com/api/bookmark',
        postData: dataString,
        onSuccess: function(response, additionalInfo) {
            var details = {};
            details.response = response;
            appAPI.message.toPopup({
            response:response
        });

        },
        onFailure: function(httpCode) {
        //  alert('POST:: Request failed. HTTP Code: ' + httpCode);
        }
    });
    });
  });

Était-ce utile?

La solution

Dans cet échantillon de code, la variable activetaburl est uniquement définie une fois que une réponse reçue du fichier extension.js puisque la messagerie est asynchrone par conception. Par conséquent, lorsque vous appelez alert(activeTabUrl); dans le code, le message n'a pas encore été reçu auprès du code extension.js la valeur est toujours nul puis qu'il a été initialisé.

Pour utiliser la variable ActivetaBURL Vous devez attendre le mesage du fichier extension.js , et vous devez donc placer le code à l'aide de la variable dans le rappel de la Soumission de message, de préférence en tant que fonction. Notez également que l'utilisation d'une alerte dans le code contextuel provoque la fermeture de la fenêtre contextuelle et ne doit donc pas être utilisée dans la portée de la popup.

J'ai testé le code contextuel suivant, qui éloigne la variable pour éviter toute confusion et transmet l'URL de l'onglet Active en tant que paramètre à la fonction appelée dans l'auditeur de messages et fonctionnait comme prévu:

function crossriderMain($) {
  // Message listener for response from active tab
  appAPI.message.addListener(function(msg) {
    if (msg.type === 'active-tab-url') ShowPageUrl(msg.url);
  });

  function ShowPageUrl(url) {
    $('#page-url').html('<b>Page URL</b>: ' + url);
  }

  // Request URL from active tab
  appAPI.message.toActiveTab({type: 'active-tab-url'});

    //alert(activeTabUrl);
  // THE REST OF YOUR CODE
}

[ Disclaimer de non-responsabilité : Je suis un employé de crossrider]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top