Senden mehrerer Anwendungsprotokolle (ähnlich wie mailto:)

8

Ich arbeite mit einer Anwendung, die ein eigenes Protokoll erstellt hat, wie es MS für seinen MSN-Client msnim:[email protected]

getan hat

Allerdings muss ich ein PHP oder Javascript (oder eine Kombination) erstellen, um so schnell wie möglich 3 Anfragen an das Protokoll zu senden. Ich möchte es auch, wenn das Endergebnis www.test.com/send.php ist, dass eine Benutzerverknüpfung <a href='www.test.com/send.php'> nicht auftauchen oder auf eine Seite umleiten würde, ähnlich wie bei

<?php header('Location: msnim:[email protected]'); ?> erstellt keine neue Seite oder Weiterleitung beim Klicken von Benutzer auf href

Hier ist ein JQUERY und JSBin meines Proof of Concept

Ссылка

%Vor%

Das scheint OK mit IE9 zu funktionieren und soweit ich IE8 sehen kann. Firefox 10 scheint auch in Ordnung zu sein, aber Chrome 17 tut nur die erste E-Mail.

Edit 1: Aktualisiert mit MSN anstelle von AIM-Links, um universeller zum Testen zu sein und jquery-Beispiel und JSbin

einzuschließen

Bearbeiten 2: Auf Mailto-Links aktualisiert

    
ParoX 27.02.2012, 21:39
quelle

2 Antworten

10

Der folgende HTML / JavaScript-Code beobachtet Klicks auf <a id="click_me"> und erstellt zwei neue iFrames für eine URL, die das von Ihnen erstellte benutzerdefinierte URI-Schema auslösen kann:

%Vor%

Der folgende PHP-Code wird in diesen iFrames angezeigt:

%Vor%

Getestet unter Safari und Chrome , öffnet dies mehrere IM-Fenster, wenn auf den Link geklickt wird. Offensichtlich zwicken Sie zu Ihrer Zufriedenheit.

    
Josh 27.02.2012 21:43
quelle
8

Aktualisierung:

Wie BHare hervorhebt, scheint keiner der "Multiple Popup" -Ansätze in den neuesten Versionen von Chrome zu funktionieren. Der Grund dafür liegt in der Erkennung von "benutzerinitiierten" Aktionen im Gegensatz zu potenziell böswilligen Überflutungen von Benutzerbildschirmen mit unerwünschten Fenstern.

Im Wesentlichen ermöglicht Chrome Ihnen, höchstens ein Pop-up-pro-Klick-Ereignis auszulösen. Das click -Ereignis muss auch eindeutig sein, so dass es keinen Handler auslösen kann, der Popup # 1 anzeigt, an den Elternknoten weitergibt und einen anderen Handler auslöst, der Popup # 2 usw. anzeigt.

Ein weiterer fehlgeschlagener Versuch wurde unternommen, indem versucht wurde, die Popups zu verteilen (die Hauptseite initiiert das Popup A, das Popup B initiiert, das Popup C auslöst usw.) - dies wurde als nicht vom Benutzer initiierte Aktion erkannt und letztlich nur ein Protokollaufruf erlaubt.

Es ist bedauerlich, dass dieses Verhalten nicht durch eine bearbeitbare Richtlinie gesteuert wird, d. h. es kann nicht angepasst werden, indem Popups basierend auf der Ursprungsdomäne zugelassen werden.

Abhängig von den Implementierungsspezifikationen (z. B. Intranet oder Internet) können Sie möglicherweise eine Erweiterung für Chrome codieren, die lautet initiiere die Popups auf Chrome-Ebene (was browser chrome bedeutet, effektiv alle Inhalte / Stile / Skripte, die außerhalb und über jeder einzelnen Seite existieren). Ihre Seite kann wiederum die Verfügbarkeit von benutzerdefinierten Add-Ons erkennen und Ihre "Triple-Links" zu dieser Erweiterung leiten oder den Endbenutzer auffordern, das Add-On zu installieren. Sehen Sie, wie Sie das Verhalten von Zielprotokollverknüpfungen nicht ändern können (indem Sie z. B. die Anweisungen in einem einzigen Aufruf ähnlich dem von href="mailto: first @ email.com, second @ email.com) kombinieren , third @ email.com ") Dies ist möglicherweise die einzige Option, die Ihnen in diesem Stadium zur Verfügung steht.

Ursprüngliche Antwort:

Die protokollspezifische Verbindung würde auf der Clientseite genauso gut funktionieren, ohne jemals auf den Server zu gehen; Sie können nur einen iframe (s) zur Laufzeit mit dem richtigen src set hinzufügen.

Zuerst sollten wir uns gut um das Markup kümmern. Es ist erniedrigend, URLs manuell den Klickfunktionen zuzuweisen. Ich habe es auf die erste Art und Weise gemacht, die funktionierte und Sinn ergab (um den Preis der HTML-Validierung), aber Sie könnten sauberer sein und benutzerdefinierte Daten-Attribute verwenden:

%Vor%

Weißt du was noch erniedrigend ist? Click-Funktionen müssen manuell gebunden werden - das kostet einfach zu viel Aufwand. Und was wäre, wenn es zwei solche Anker gäbe? Sagen wir jQuery, dass das click -Ereignis an jeden Link gebunden wird, der dieses Protokoll verwendet:

%Vor%

Bevor wir über die Attribute href ~ href3 iterieren, schreiben wir eine Funktion, die das Öffnen einzelner mailto-Links behandelt:

%Vor%

Er prüft, dass die URL von einem nicht leeren Attribut übergeben wird, erstellt dynamisch ein iframe-Element und ordnet Attribute diesem zu und "startet" es, indem es an body anfügt.

Hier abgeschlossen: Ссылка - Zusätzliche Boni beinhalten einige CSS, um Hilfs-Iframes zu verbergen und protokollspezifische Links zu stylen. Und ja, ich weiß, ich habe versprochen, über href-Attribute zu iterieren, aber ich habe es gerade manuell gemacht.

html

%Vor%

css

%Vor%

js

%Vor%     
o.v. 07.03.2012 08:06
quelle