我有这个简单的node.js服务器代码,它发送alert
:
var sys = require("sys"),
my_http = require("http");
my_http.createServer(function(request,response){
response.writeHeader(200, {"Content-Type": "application/javascript","Content-Length": "alert('');".length });
response.write("alert('');");
response.end();
}).listen(8080);
sys.puts("Server Running on 8080");
服务器已启动并正在运行:
我确实看到了响应的正确标题:
但脚本没有执行!
此外,控制台显示:
资源被解释为文档但以MIME类型传输 application / javascript:“http://xxxx.com:8080/”。
问题:
我缺少什么,如何使此警报工作?
答案 0 :(得分:3)
要让浏览器执行脚本,我宁愿使用Content-Type:html
&发送
<script type="text/javascript">alert('test');</script>
这是我在ajax存在之前用于“javascript流媒体”的旧技巧。
为此,浏览器必须知道它是一个HTML文档(或者“javascript url call”必须从现有的HTML上下文中初始化)
这样的事情:
<!DOCTYPE html>
<html>
<body>
<iframe src="your_js_node_url_here">
</body>
</html>
您可以为your_js_node_url传输任何javascript,保持“始终打开”连接。
当然,这是一个“老派”,但可以在没有websockets的情况下实现“代码推送”。
答案 1 :(得分:1)
对于浏览器执行您的JavaScript,必须要告诉它这是可执行代码(而不是要格式化和显示的文本。)
您可以在HTML文档中发送JavaScript,并使用SCRIPT
标记,如下例所示:
var sys = require("sys"),
my_http = require("http");
my_http.createServer(function(request,response){
response.writeHeader(200, {"Content-Type": "text/html", });
response.write("<html><body><script>alert('hello');</script></body>");
response.end();
}).listen(8080);
sys.puts("Server Running on 8080");
另一种方法是通过浏览器上的另一个JavaScript程序(a-la AJAX)获取JavaScript并让其他程序执行它。