【发布时间】:2009-12-07 15:01:34
【问题描述】:
在 HTML 页面中,我如何知道何时定义了外部加载的 Javascript 对象并准备好对其调用方法?
问题细节:
我正在使用 uservoice 反馈 Web 应用程序,包括他们的 Javascript 小部件和他们的 SSO (Single-SignOn) 选项。
一切正常。窗口左侧有一个突出的反馈选项卡。我可以使用以下锚点获取其他链接以打开他们的弹出式反馈小部件:
<a href="#" onclick="UserVoice.Popin.show(uservoiceOptions); return false;">feedback</a>
但是...我在尝试支持额外的工作流程时遇到了麻烦 - 在一个特定页面(例如反馈页面)上,我希望用户语音反馈表单在用户进入页面时自动弹出,而无需通过点击事件。
我尝试将以下内容放在页面底部:
<script type="text/javascript">
function _autoPopupUserVoice() {
UserVoice.Popin.show(uservoiceOptions);
}
_loadSuper = window.onload;
window.onload = (typeof window.onload != 'function') ? _autoPopupUserVoice : function() { _loadSuper(); _autoPopupUserVoice(); };
</script>
但 Firebug 显示错误:
“用户语音未定义”。
所以我猜想在调用 _autoPopupUserVoice() 时用户语音 Javascript 尚未执行。
我尝试了其他一些方法,但没有成功。如何知道Uservoice Javascript 对象何时加载并准备好对其调用方法?
作为参考,Uservoice 对象是通过页面末尾的以下 Javascript 加载的:
<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(); };
【问题讨论】:
标签: javascript dom-events uservoice