是否有任何理由为什么只有在流行的JS库中窗口不在iframe中时才实现Diego Perini的IE的DOMContentLoaded技巧?
jQuery的:
//If IE and not a frame continually check to see if the document is ready
var toplevel = false;
try {
toplevel = window.frameElement == null;
} catch(e) {}
if ( document.documentElement.doScroll && toplevel ) {
doScrollCheck();
}
Run Code Online (Sandbox Code Playgroud)
原型:
document.observe('readystatechange', checkReadyState);
if (window == top)
timer = pollDoScroll.defer();
Run Code Online (Sandbox Code Playgroud)
它们都检查窗口是否等于顶部,如果它document.documentElement.doScroll('left');是用于检查就绪状态.但为什么不在何时使用呢window != top?
我正在研究scala中的简单多人游戏,我想通过websockets为JS客户端公开.
这是我的WebsocketServer类
class WebsocketServer(actorRef: ActorRef, protocol: Protocol, system: ActorSystem, materializer: ActorMaterializer) extends Directives {
val route = get {
pathEndOrSingleSlash {
handleWebSocketMessages(websocketFlow)
}
}
def websocketFlow: Flow[Message, Message, Any] =
Flow[Message]
.map {
case TextMessage.Strict(textMessage) => protocol.hydrate(textMessage)
}
.via(actorFlow)
.map(event => TextMessage.Strict(protocol.serialize(event)))
def actorFlow : Flow[Protocol.Message, Protocol.Event, Any] = {
val sink =
Flow[Protocol.Message]
.to(Sink.actorRef[Protocol.Message](actorRef, Protocol.CloseConnection()))
val source =
Source.actorRef[Protocol.Event](1, OverflowStrategy.fail)
.mapMaterializedValue(actor => actorRef ! Protocol.OpenConnection(actor))
Flow.fromSinkAndSource(sink, source)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的actor的简化代码,它应该从websocket服务器接收消息.
class GameActor() extends Actor {
private var connections: List[ActorRef] …Run Code Online (Sandbox Code Playgroud) 所以这是我的websocket服务器实现.
val route = get {
pathEndOrSingleSlash {
handleWebSocketMessages(websocketFlow)
}
}
def websocketFlow: Flow[Message, Message, Any] =
Flow[Message]
.collect { case TextMessage.Strict(textMessage) => protocol.hydrate(textMessage) }
.via(chatActorFlow(UUID.randomUUID()))
.map(event => TextMessage.Strict(protocol.serialize(event)))
def chatActorFlow(connectionId: UUID) : Flow[Protocol.Message, Protocol.Event, Any] = {
val sink = Flow[Protocol.Message]
.map(msg => Protocol.SignedMessage(connectionId, msg))
.to(Sink.actorRef(chatRef, Protocol.CloseConnection(connectionId)))
val source = Source
.mapMaterializedValue {
actor : ActorRef => {
chatRef ! Protocol.OpenConnection(actor, connectionId)
}
}
Flow.fromSinkAndSource(sink, source)
}
Run Code Online (Sandbox Code Playgroud)
我不知道是否有什么办法一旦类型的消息,关闭连接ConnectionClosed是通过发送chatRef?
有没有办法从SESSION或其他来源传递参数到服务?我的捆绑配置中有类似的东西:
<service id="class" class="MyClass">
<argument key="lang">%class.lang%</argument>
</service>
Run Code Online (Sandbox Code Playgroud)
我知道可以通过从DependencyInjection中的Extension传递参数来完成,但是我不确定这个变量的来源,它可能是会话但在某些情况下它可以从数据库中获取.我只是不想在DependencyInjection中硬编码该参数应该从会话传递.
我也知道我可以从app config传递参数但是在应用程序中进行一些操作之后有没有办法改变它?