Développement d’une extension Safari

Un petit post pour ceux qui veulent développer une extension Safari,

une fois dans l’extension builder, c’est la cata pour le debug!

Donc il vaut mieux faire son fichier Javascript (généralement), par exemple : fichier.js

// let's go

// -----------------------------------------------------------------------------
// les variables de base nécessaires :
//  adresse_freebox : adresse http de la freebox
//  url : url cliqué à téléchargé avec l'extension
//  app_token : la pass phrase utilisé pour obtenir une session / vide si première connexion
//  
// -----------------
// les fonctions :
//  download        fonction maitre, obtient l'URL cliqué
//  authorize       obtient l'autorisation "app_token"
//  test_authorize  test que l'autorisation est validée
//  get_challenge   
//  session
//  download_list
//  download_add
// -----------------------------------------------------------------------------

// Fonctions maître "download"
function download(url){
    console.info("URL= "+url);
    // il faut tester si déjà autorisé (app_token déjà enregistré)

    authorize();
}

et avoir 2 fichiers HTML :

– le premier global.html : liaison entre l’Extension Builder et le fichier Javascript

<!DOCTYPE HTML>
<html>
<head>
c'est parti!
<script>
// on initie les Listener
safari.application.addEventListener("command", handleCommand, false);
safari.application.addEventListener("validate", validateCommand, false);
safari.extension.settings.addEventListener("change", settingsChangeHandler, false);

function settingsChangeHandler(event)
{
    // ouverture de la page au clic dans l'option
    if (event.key === "donate") {
		if (safari.extension.settings.donate == true){
			var myWin = safari.application.openBrowserWindow();
			myWin.activeTab.url="http:/blog.aube-tech.com/dons";
			safari.extension.settings.donate = false;
		}
    }
}

function login(cb){
//on se log
	//alert("login");
	//appel des variables locales
	var pass = safari.extension.settings.password;
	var ident = safari.extension.settings.identifiant;
	var freebox_address = safari.extension.settings.freeboxAdress;
	var params = "login="+ident+"&passwd=" + pass ;
}
</script>
</head>
</html>

– le deuxième test.html : fichier html qui appelle le script sans s’occuper de l’extension builder

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <!-- 
            TEST MODE
        -->
        <script type="text/javascript" src="sha1.js"></script>
        <script type="text/javascript" src="atmyfreebox.js"></script>
        <script type="text/javascript">
            // -----------   TEST AREA  --------------
            //variable de test:
            var url = "http://www.cpasbien.me/_torrents/a-la-merveille-to-the-wonder-french-dvdrip-ac3-2013.torrent";
            var adresse_freebox = "http://mafreebox.freebox.fr";
            var app_token = ""; //vide = créé une nouvelle autorisation à chaque fois
            var challenge = ""; //vide = créé une nouvelle session à chaque fois
            // c'est parti :
            download(url);
            // ---------------------------------------
        </script>
    </head>
    <body>
        <div>atmyfreebox.js launched !</div>
        <div>-- TEST MODE --</div>
    </body>
</html>

Il faut bien évidemment intégrer toutes les variables essentielles dans chaque fichier .html (pour mon extension ‘At my Freebox’, il faut au moins le lien cliqué (url) et l’adresse de la freebox (adresse_freebox) par exemple).

J’utilise Tincta et NetBeans pour l’éditeur Javascript et le ‘Profilage Javascript’ intégré à Safari pour le débug du fichier Javascript.

Une fois débuggué au mieux via le fichier test.html, alors on peut passer à l’étape suivante et appelé le fichier javascript via l’extension (le fichier global.html).

Good luck!

Publié dans At my Freebox Tagués avec : , , ,
4 commentaires sur “Développement d’une extension Safari
  1. camin dit :

    Bonjour,
    comment peut-on implémenter un script (javascript ou applescript), pour effacer le cache et l’historique de Safari sur Os X 10.9.1.
    En effet safari ne supporte pas la suppression de l’historique sur fermeture est cette fonction me manque. Pouvez-vous me donner des pistes ?
    cordialement

    • Arnaud dit :

      Bonjour!

      via une Extension Safari, à ma connaissance (limitée), ça n’est pas possible. L’extension travaille en autonomie (sandbox), et il n’y a pas d’API pour ça entre l’extension et safari (cf. https://developer.apple.com/devcenter/safari/)

      Par contre, manuellement, on peut activer l’option « Navigation privée » (menu barre/safari) à chaque ouverture de Safari, si cela répond au besoin, il est facile de l’automatiser via un AppleScript.

      Via ce code par exemple (librement adaptable), qu’il est possible de transformer en exécutable :
      tell application « Safari »
      make new document
      activate
      end tell
      tell application « System Events »
      tell process « Safari »
      click menu item « Navigation privée » of menu « Safari » of menu bar 1
      end tell
      end tell

  2. camin dit :

    Bonjour,
    merci pour ces informations.
    Cependant comment utilisez-vous ce script, en clair comment le lier à safari de sorte qu’il s’exécute automatiquement quand je quitte le logiciel ?
    merci

    • Arnaud dit :

      Hello,
      en fait, le principe ci-dessus est d’activer le mode privé à l’ouverture, et non supprimer les traces après, qui n’est pas faisable automatiquement via Safari.

      Il suffit donc de lancer le script ci-dessus (via « Editeur AppleScript ») au lieu de Safari pour activer automatiquement le Mode Privé à l’ouverture.

      Sinon voici le script déjà compilé en une application, à ouvrir au lieu du « vrai » Safari.
      http://prod.aube-tech.com/PrivateSafari.zip
      (il faudra autoriser l’application pour l’accessibilité)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*