未准备好iframe时会触发iframe onload

时间:2018-10-11 17:09:59

标签: javascript reactjs iframe

所以我在Vanilla React中有问题。 我在ready()函数中有以下代码行:

var current = this;    
React.createElement(
            "iframe",
            {id: "iframeController", 
             ref: "iframe", 
             src: "data:text/html;charset=utf-8," + escape(notification.description), 
             onLoad: current.iframeLoaded(this)}
)

notification.description来自我对this.state.notifications中的对象所做的映射

及其遵循的功能

iframeLoaded(iframe) {
    if(iframe) {
        iframe.height = iframe.contentWindow.document.body.scrollHeight + "px";         
    }
}

但是,如果我在iframeLoaded中用console.log记录(iframe)元素,则它返回为null。如果我getElementById也是一样,只是没有定义。

我做了一个setTimeout,看看它是否是组件更新问题,事实证明是这样。因此,即使在Chrome中,onLoad也会在src有时间呈现之前触发。

我正在尝试获取高度,以便可以将其设置在窗口中,以便调整其大小并获取要获取的iframe的全部高度。

有人可以给我有关如何解决此问题的提示吗?

1 个答案:

答案 0 :(得分:1)

我怀疑问题在于以下这一行: // Action where you want to show time picker { let datePicker = UIDatePicker() datePicker.datePickerMode = .time let dateFormatter = DateFormatter() dateFormatter.locale = Locale(identifier: "en_US_POSIX") dateFormatter.timeZone = TimeZone.autoupdatingCurrent dateFormatter.timeStyle = DateFormatter.Style.short } // On Action of Datepicker value change or Done Outlet { let date = self.datePicker.date let strTime = safeDate.dateStringWith(strFormat: "hh:mm a") print(strTime) } // Extension of Date extension Date { func dateStringWith(strFormat: String) -> String { let dateFormatter = DateFormatter() dateFormatter.timeZone = Calendar.current.timeZone dateFormatter.locale = Calendar.current.locale dateFormatter.dateFormat = strFormat return dateFormatter.string(from: self) } } 。在这种情况下,onLoad: current.iframeLoaded(this)}被设置为onLoad的返回值。

我相信您想将值包装在函数中(不是箭头符号,而是传统函数):

current.iframeLoaded(this)