web-dev-qa-db-fra.com

javascript window.open en safari

J'ai rencontré un problème avec l'ouverture d'une nouvelle fenêtre en safari (à la fois pour les versions ipad et desktop) qui tourne autour du bloqueur de popups. Fondamentalement, j'ai trouvé que si window.open n'est pas appelé à partir d'un événement de clic, safari bloquera la fenêtre contextuelle.

L'événement qui appelle window.open est actuellement inchangé à partir d'une zone de liste.

Existe-t-il un autre moyen que de changer l'événement que nous traitons pour inciter le safari à autoriser une fenêtre contextuelle dans ce scénario? (l'événement inchangé)

30
theMothaShip

Je ne pense pas qu'il existe un moyen d'ouvrir une nouvelle fenêtre dans un safari mobile autrement qu'en cliquant sur un bouton. Reportez-vous à cette StackOverflow Question qui est similaire. Je ne sais pas si cela fonctionnera, mais vous pouvez regarder déclenchant un clic de bouton par programme en utilisant la fonction trigger () de jquery .

Vous pouvez également examiner les options d'affichage d'une boîte de dialogue dans votre propre page, en utilisant peut-être des outils tels que jquery ui.

HTH!

13
Scorpion-Prince

Le safari a un silencieux bloqueur de fenêtres pop-up qui ne s'affiche pas lorsqu'un lien est bloqué.

Pour vérifier si le bloqueur de fenêtres publicitaires intempestives est actif, accédez aux paramètres de safari> sécurité> quelque chose comme bloquer les fenêtres publicitaires intempestives.

Pour le traverser de manière simple, puisque je ne peux pas ouvrir une nouvelle fenêtre, j'affiche une alerte montrant une pop-up bloquée.

Dans mon cas, j'utilise des entrées sélectionnées pour ouvrir des liens externes:

HTML

<select id="retailer" class="windowOpen retailer-submenu">
    <option value="null">Select one</option>
    <option value="http://Amazon.com">Amazon</option>
    <option value="http://ebay.com">eBay</option>
</select>

Javascript

<script type='text/javascript'>
    $('select.windowOpen').change(function(){
        var url = $(this).val();

        var open = window.open(url);
        if (open == null || typeof(open)=='undefined')
            alert("Turn off your pop-up blocker!\n\nWe try to open the following url:\n"+url);
    });
</script>

Le code pour vérifier si une fenêtre pop-up est bloquée est juste celui-ci:

var open = window.open('http://google.com');
if (open == null || typeof(open)=='undefined')
    alert("Turn off your pop-up blocker!");

PS: le déclencheur jquery n'a pas fonctionné avec moi.

30
Lucas Serafim