我的React表单完成加载后,我需要运行一个简单的Java脚本函数。 JS是从第三方加载的,因此我无法控制它,并且我需要运行其功能之一才能使验证码部分显示在我的表单中。如果我按F5键,则该区域将按预期显示,但通过应用程序中的路线导航至该页面不会触发负载。

我已经解决了,如果我叫这行JS

window .__ challenger.callPageRequest();

然后出现验证码区域,我知道这是可行的,因为我向正在渲染的表单添加了一个临时按钮,并在按钮单击时调用了功能。但是我不能有一些随机按钮,每次导航到表单时,我只需要触发此JS行即可。

我试过使用:

componentDidMount() {
    window.__challenger.callPageRequest();
}


但这抱怨:

无法读取未定义的属性“ callPageRequest”

而且我尝试添加:

window .__ challenger.callPageRequest();

到render方法中表单的末尾。

为什么做这么简单的事情这么难?任何帮助将不胜感激。

最佳答案

最简单(可能是最骇人的)是轮询window并在触发该功能之前检查该功能的存在:

componentDidMount() {
    const poll = () => {
        if(window.__challenger && window.__challenger.callPageRequest) {
            window.__challenger.callPageRequest();
        }else {
            setTimeout(() => {
                poll();
            }, 250);
        }
    };
    poll();
}


如果它在第一遍中存在,请继续并立即调用它。如果尚不存在,请等待250毫秒,然后重试。

07-26 06:41