【问题标题】:How to refer to a function that will be declared after script loading如何引用将在脚本加载后声明的函数
【发布时间】:2020-02-05 11:20:13
【问题描述】:

在 Sitecore 环境中,我无法重新排序在 <body> 末尾实例化的 js 脚本,我需要检查这些脚本中的某个函数 (Gigya) 是否返回了真实值(我需要检查用户是否登录)。

我的脚本只能在加载这些脚本之前加载,因此我的脚本会在必须调用该函数之前检查给定函数是否具有真正的返回值。

鉴于结构情况,我总是得到一个未知功能的错误。

有没有办法绕过这个?我的意思是,我试图在加载过程结束时在正文中附加一个包含我的检查功能的临时脚本,但没有成功。

有什么提示吗?也许添加听众?

【问题讨论】:

  • 这个函数是一个承诺吗?
  • @DhananjaiPai 我的功能还是我需要检查的功能?在第一种情况下,不,不是。在第二种情况下,代码被编译,所以我无法正确阅读。
  • 如何将 Gigya 代码添加到页面中?是否使用
  • @DhananjaiPai 是的,加在正文的末尾。

标签: javascript dom-events gigya


【解决方案1】:

方法 1

由于您需要等待的函数已加载<script> 标签,您可以将整个代码包装在一个函数中并使用 onload 调用该函数

<script src="...gigya..." onload="functionToExecute()">

方法 2

您可以创建一个新的合成事件,而不是调用functionToExecute,例如“gigyaloaded”并在调用您的函数之前收听它。

[https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events]

应该使用上面的脚本 onload 发出事件。

【讨论】:

  • 谢谢。稍后我会试一试。
  • 看起来我无法将 onload="anyFunction()" 添加到脚本声明中,因为所有脚本都是由 Sitecore 的自动化加载的,它将脚本作为资源附加。他们告诉我没有办法在脚本声明中添加 onload="" 。根据方法 2,我正在尝试找出您的方法,但我真的需要更多提示。你能帮助我吗?我调用的函数是: gigya.socialize.getUserInfo({ callback: renderUI }); gigya.socialize.addEventHandlers({ onConnectionAdded: renderUI, onConnectionRemoved: renderUI });应该是什么逻辑?
猜你喜欢
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多