Browser | Supported | Notes |
---|---|---|
Internet Explorer | No | IE not supported |
Mozilla Firefox(火狐) | Yes | version 6.0 |
Google Chrome(谷歌) | Yes | GC is supported |
Opera(欧朋) | Yes | version 11 |
Safari(游猎) | Yes | version 5.0 |
if(typeof(EventSource)!=="undefined")
{
alert("Support");
}
else
{
alert("Not Support");
}
EventSource对象用于接受服务器端发送事件通知,每当source接受到来着sseserver页面的更新消息,就会触发onmessage事件,然后会将数据推入id为”result”的元素中。除了onmessage事件,EventSource对象还有onerror和onopen。
事件 | 描述 |
---|---|
onopen | 当通往服务器的连接被打开 |
onmessage | 当接收到消息 |
onerror | 当发生错误 |
var source=new EventSource("sseserver.jsp");
source.onmessage=function(event)
{
document.getElementById("result").innerHTML += event.data + "
";
};
客户端完整代码:
<html>
<head>
<title>SSEtitle>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
head>
<body>
<h1>get datah1>
<div id="result">div>
<div id = "err">div>
<script>
if(typeof(EventSource)!=="undefined")
{
var source=new EventSource("sseserver.jsp");
source.onmessage=function(event)
{
document.getElementById("result").innerHTML += event.data + "
";
};
}
else
{
document.getElementById("result").innerHTML="not support SSE";
}
script>
body>
html>
response.setContentType("text/event-stream");
这行代码需要放在所有的前面,不然会报出错误:“EventSource’s response has a MIME type (“text/html”) that is not “text/event-stream”. Aborting the connection.”。 有兴趣的读者可以试一试在添加这行代码:
<meta name="content-type" content="text/event-stream">
笔者在Chrome上测试过,它对SSE不会产生任何作用。服务器端完整代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'sseserver.jsp' starting pagetitle>
<%
response.setContentType("text/event-stream");
%>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="-1">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
head>
<body>
<%
Date date = new Date();//create time Object
out.println("data:"+date.toString());
out.flush();
%>
body>
html>
response.setContentType("text/event-stream");
<meta name="content-type" content="text/html; charset=UTF-8">
和JSP编码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
一致即可。
<%
Date date = new Date();//create time Object
out.println("2");
out.println("data:"+date.toString());
out.flush();
%>
这样就可以正常显示数据了。有时候event不能显示字符串,我认为是EventSource的工作机制造成的。