Если элемент, к которому вы пытаетесь получить доступ, находится внутри iframe
, и вы пытаетесь получить к нему доступ за пределами контекста iframe
, это также приведет к сбою.
Если вы хотите получить элемент в iframe, вы можете узнать, как здесь .
Может быть, язык изменился с момента публикации, но это работает для меня. Это пример того, где я хотел скрыть инициализатор, чтобы контролировать время жизни объекта и выполнять постобработку. В этом случае я хотел отслеживать и отправлять аналитику, основываясь на конфигурации звонящего.
private protocol Reportable {
init()
var people:[String:AnyObject] { get }
var track:[String:AnyObject] { get }
}
public class Analytics {
public final class Alpha: Reportable {
var thingOne: String?
var thingTwo: String?
private init() {}
private var people:[String:AnyObject] { return [:] }
private var track:[String:AnyObject] { return [:] }
}
public final class Bravo: Reportable {
var thingOne: String?
var thingTwo: String?
private init() {}
private var people:[String:AnyObject] { return [:] }
private var track:[String:AnyObject] { return [:] }
}
public static func alpha(configure:Alpha -> ()) {
return report(configure)
}
public static func bravo(configure:Bravo -> ()) {
return report(configure)
}
private static func report<T:Reportable>(configure:T -> ()) {
let event = T()
configure(event)
Analytics.doSomething()
}
static func doSomething() {
}
}
// separate file
func clientCode() {
Analytics.alpha { event in
event.track // error
event.thingOne = "foo"
event.thingTwo = "bar" }
Analytics.bravo { event in
event.thingOne = "foo"
event.thingTwo = "bar" }
}