Wie kann ich in einer HTML-Seite wissen, wann ein extern geladenes Javascript-Objekt definiert und bereit ist, dass Methoden darauf aufgerufen werden?
Besonderheiten des Problems:
Ich benutze die Benutzerstimme Feedback-Webanwendung einschließlich ihres Javascript-Widgets und ihres SSO ( Single-SignOn ) Option.
Alles funktioniert einwandfrei. Es gibt eine auffällige Registerkarte "Feedback" auf der linken Seite des Fensters. Und ich kann den folgenden Anker für zusätzliche Links verwenden, um ihr Popup-Feedback-Widget zu öffnen:
<a href="#" onclick="UserVoice.Popin.show(uservoiceOptions); return false;">feedback</a>
Aber... Ich habe Probleme beim Versuch, einen zusätzlichen Workflow zu unterstützen - auf einer bestimmten Seite (z.B. der Feedback-Seite) möchte ich, dass das uservoice-Feedback-Formular automatisch aufpoppt, wenn der Benutzer auf die Seite geht, ohne über ein Klick-Ereignis initiiert zu werden.
Ich habe versucht, das Folgende unten auf der Seite einzufügen:
<script type="text/javascript">
function _autoPopupUserVoice() {
UserVoice.Popin.show(uservoiceOptions);
}
_loadSuper = window.onload;
window.onload = (typeof window.onload != 'function') ? _autoPopupUserVoice : function() { _loadSuper(); _autoPopupUserVoice(); };
</script>
Aber Firebug zeigt einen Fehler an:
" BenutzerStimme ist nicht definiert ".
Ich vermute also, dass das Uservoice-Javascript noch nicht ausgeführt worden ist, wenn _autoPopupUserVoice()
genannt wird.
Ich habe noch ein paar andere Dinge ausprobiert, aber es ist mir nicht gelungen, es zum Laufen zu bringen. Wie kann man wissen, wann die Uservoice
Javascript-Objekt ist geladen und bereit für den Aufruf von Methoden auf ihm?
Als Referenz wird das Uservoice-Objekt über das folgende Javascript am Ende der Seite geladen:
<script type="text/javascript">
function _loadUserVoice() {
var s = document.createElement('script');
s.setAttribute('type', 'text/javascript');
s.setAttribute('src', ("https:" == document.location.protocol ? "https://" : "http://") + "cdn.uservoice.com/javascripts/widgets/tab.js");
document.getElementsByTagName('head')[0].appendChild(s);
}
_loadSuper = window.onload;
window.onload = (typeof window.onload != 'function') ? _loadUserVoice : function() { _loadSuper(); _loadUserVoice(); };