SockJS如何创建一个iframe



我在我的网站上使用SockJS,我正在使用端点/msg

当我转到 mysitename.com/msg/iframe.html 时,它显示此页面:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script>
document.domain = document.domain;
_sockjs_onload = function(){SockJS.bootstrap_iframe();};
</script>
<script src="https://cdn.jsdelivr.net/sockjs/1.0.0/sockjs.min.js"></script>
</head>
<body>
<h2>Don't panic!</h2>
<p>This is a SockJS hidden iframe. It's used for cross domain magic.</p>
</body>
</html>

SockJS是如何做到这一点的?

它位于后端的 spring websocket 的 org.springframework.web.socket.sockjs.support.AbstractSockJsService 中。

例如:

public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
private static final String SOCKJS_VERSION = "https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.3.0/sockjs.min.js";
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/handler").setAllowedOrigins("*");
registry
.addEndpoint("/handler")
.setAllowedOrigins("*")
.withSockJS()
.setClientLibraryUrl(SOCKJS_VERSION);
}

}

如果你遵循setClientLibraryUrl,你会看到它正在被解决的地方。

检查 https://github.com/spring-projects/spring-framework/blob/master/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java

并搜索"IFRAME_CONTENT">

最新更新