请教大神,javascript在哪里编写里为什么不能把</script>放到字符串里

在开发中遇到javascript从后台获取的url 会被转义,如:http://localhost:8080/Home/Index?a=14&b=15&c=123,想把它转成http://localhost:8080/Home/Index?a=14&b=15&c=123
网上找了半天的解决方案:
转义分为escapeHTML和unescapeHTML,先看两个函数的实现。
* @function escapeHTML 转义html脚本 & & & " '
* @param a -
6 escapeHTML: function(a){
return a.replace(/&/g, "&").replace(/&/g, "&").replace(/&/g, "&").replace(/"/g, "&").replace(/'/g, "&");;
* @function unescapeHTML 还原html脚本 & & & " '
* @param a -
15 unescapeHTML: function(a){
return a.replace(/&/g, "&").replace(/&/g, "&").replace(/&/g, "&").replace(/&/g, '"').replace(/&/g, "'");
1,escapeHTML将& & & " '转成字符实体&使用场景:&(1)用户在页面中录入(比如输入框) &script&alert(2);&/script&, js将该内容提交给后端保存&(2)显示时,后端将字符串返回前端;js接收到之后:&a, 使用escapeHTML,将字符串转为 &script&alert(2);&/script&此时,浏览器将能正确解析,因为浏览器接收到实体字符后,转成对应的尖括号等。&b, 不使用escapeHTML,浏览器一看到&,便认为是html标签的开始,直接把刚才的字符串当脚本执行了,这就是xss漏洞。&2,unescapeHTML将字符实体转成& & & " '&使用场景:&后端将已经转义后的内容显示到页面;比如&script&alert(2);&/script&&js收到后:&a,前端进行unescapeHTML,则可以直接dom操作,将标签显示到页面。&b,前端没有unescapeHTML,则原样输出&script&alert(2);&/script&,但此时并没有执行。&转义字符:&
提示:使用实体名而不是数字的好处是,名称易于记忆。不过坏处是,浏览器也许并不支持所有实体名称(对实体数字的支持却很好)。
阅读(...) 评论()给JavaScript初学者的24条最佳实践 - WEB前端 - 伯乐在线
& 给JavaScript初学者的24条最佳实践
作为“的后续,这篇文章将回顾JavaScript的知识 !如果你看完了下面的内容,请务必让我们知道你掌握的小技巧!
1.使用 === 代替 ==
JavaScript 使用2种不同的等值运算符:===|!== 和 ==|!=,在比较操作中使用前者是最佳实践。
“如果两边的操作数具有相同的类型和值,===返回true,!==返回false。”——《JavaScript:语言精粹》
然而,当使用==和!=时,你可能会遇到类型不同的情况,这种情况下,操作数的类型会被强制转换成一样的再做比较,这可能不是你想要的结果。
2.Eval=邪恶
起初不太熟悉时,“eval”让我们能够访问JavaScript的编译器(译注:这看起来很强大)。从本质上讲,我们可以将字符串传递给eval作为参数,而执行它。
这不仅大幅降低脚本的性能(译注:JIT编译器无法预知字符串内容,而无法预编译和优化),而且这也会带来巨大的安全风险,因为这样付给要执行的文本太高的权限,避而远之。
3.省略未必省事
从技术上讲,你可以省略大多数花括号和分号。大多数浏览器都能正确理解下面的代码:
JavaScript
if(someVariableExists)
if(someVariableExists)&&&& x = false
然后,如果像下面这样:
JavaScript
if(someVariableExists)
anotherFunctionCall();
if(someVariableExists)&&&& x = false&&&& anotherFunctionCall();
有人可能会认为上面的代码等价于下面这样:
JavaScript
if(someVariableExists) {
anotherFunctionCall();
if(someVariableExists) {&&&& x = false;&&&& anotherFunctionCall();&&}
不幸的是,这种理解是错误的。实际上的意思如下:
JavaScript
if(someVariableExists) {
anotherFunctionCall();
if(someVariableExists) {&&&& x = false;&&}&&anotherFunctionCall();
你可能注意到了,上面的缩进容易给人花括号的假象。无可非议,这是一种可怕的实践,应不惜一切代价避免。仅有一种情况下,即只有一行的时候,花括号是可以省略的,但这点是饱受争议的。
JavaScript
if(2 + 2 === 4) return 'nicely done';
if(2 + 2 === 4) return 'nicely done';
很可能,有一天你需要在if语句块中添加更多的语句。这样的话,你必须重写这段代码。底线——省略是雷区。
4.使用JSLint
是由大名鼎鼎的(Douglas Crockford)编写的调试器。简单的将你的代码粘贴进JSLint中,它会迅速找出代码中明显的问题和错误。
“JSLint扫面输入的源代码。如果发现一个问题,它返回一条描述问题和一个代码中的所在位置的消息。问题并不一定是语法错误,尽管通常是这样。JSLint还会查看一些编码风格和程序结构问题。这并不能保证你的程序是正确的。它只是提供了另一双帮助发现问题的眼睛。”——JSLing 文档
部署脚本之前,运行JSLint,只是为了确保你没有做出任何愚蠢的错误。
5.将脚本放在页面的底部
在本系列前面的文章里已经提到过这个技巧,我粘贴信息在这里。
记住——首要目标是让页面尽可能快的呈献给用户,脚本的夹在是阻塞的,脚本加载并执行完之前,浏览器不能继续渲染下面的内容。因此,用户将被迫等待更长时间。
如果你的js只是用来增强效果——例如,按钮的单击事件——马上将脚本放在body结束之前。这绝对是最佳实践。
JavaScript
&p&And now you know my favorite kinds of corn. &/p&
&script type=&text/javascript& src=&path/to/file.js&&&/script&
&script type=&text/javascript& src=&path/to/anotherFile.js&&&/script&
<p>And now you know my favorite kinds of corn. </p>&&<script type="text/javascript" src="path/to/file.js&&&/script>&&<script type="text/javascript" src="path/to/anotherFile.js&&&/script>&&</body>&&</html>
6.避免在For语句内声明变量
当执行冗长的for语句时,要保持语句块的尽量简洁,例如:
JavaScript
for(var i = 0; i & someArray. i++) {
var container = document.getElementById('container');
container.innerHtml += 'my number: ' +
console.log(i);
for(var i = 0; i < someArray.length; i++) {&&&& var container = document.getElementById('container');&&&& container.innerHtml += 'my number: ' + i;&&&& console.log(i);&&}
注意每次循环都要计算数组的长度,并且每次都要遍历dom查询“container”元素——效率严重地下!
JavaScript
var container = document.getElementById('container');
for(var i = 0, len = someArray. i &
container.innerHtml += 'my number: ' +
console.log(i);
var container = document.getElementById('container');&&for(var i = 0, len = someArray.length; i < len;&&i++) {&&&& container.innerHtml += 'my number: ' + i;&&&& console.log(i);&&}
感兴趣可以思考如何继续优化上面的代码,欢迎留下评论大家分享。
7.构建字符串的最优方法
当你需要遍历数组或对象的时候,不要总想着“for”语句,要有创造性,总能找到更好的办法,例如,像下面这样。
JavaScript
var arr = ['item 1', 'item 2', 'item 3', ...];
var list = '&ul&&li&' + arr.join('&/li&&li&') + '&/li&&/ul&';
var arr = ['item 1', 'item 2', 'item 3', ...];&&var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';
我不是你心中的神,但请你相信我(不信你自己测试)——这是迄今为止最快的方法!使用原生代码(如 join()),不管系统内部做了什么,通常比非原生快很多。——James Padolsey,
8.减少全局变量
只要把多个全局变量都整理在一个名称空间下,拟将显著降低与其他应用程序、组件或类库之间产生糟糕的相互影响的可能性。——Douglas Crockford
JavaScript
var name = 'Jeffrey';
var lastName = 'Way';
function doSomething() {...}
console.log(name); // Jeffrey -- 或 window.name
var name = 'Jeffrey';&&var lastName = 'Way';&&&function doSomething() {...}&&&console.log(name); // Jeffrey -- 或 window.name
更好的做法
JavaScript
var DudeNameSpace = {
name : 'Jeffrey',
lastName : 'Way',
doSomething : function() {...}
console.log(DudeNameSpace.name); // Jeffrey
var DudeNameSpace = {&&&& name : 'Jeffrey',&&&& lastName : 'Way',&&&& doSomething : function() {...}&&}&&console.log(DudeNameSpace.name); // Jeffrey
注:这里只是简单命名为 “DudeNameSpace”,实际当中要取更合理的名字。
9.给代码添加注释
似乎没有必要,当请相信我,尽量给你的代码添加更合理的注释。当几个月后,重看你的项目,你可能记不清当初你的思路。或者,假如你的一位同事需要修改你的代码呢?总而言之,给代码添加注释是重要的部分。
JavaScript
// 循环数组,输出每项名字(译者注:这样的注释似乎有点多余吧).
for(var i = 0, len = array. i & i++) {
console.log(array[i]);
// 循环数组,输出每项名字(译者注:这样的注释似乎有点多余吧).&& for(var i = 0, len = array.length; i & len; i++) {&&&& console.log(array[i]);&&}
10.拥抱渐进增强
确保javascript被禁用的情况下能平稳退化。我们总是被这样的想法吸引,“大多数我的访客已经启用JavaScript,所以我不必担心。”然而,这是个很大的误区。
你可曾花费片刻查看下你漂亮的页面在javascript被关闭时是什么样的吗?(下载
工具就能很容易做到(译者注:chrome用户在应用商店里自行下载,ie用户在Internet选项中设置)),这有可能让你的网站支离破碎。作为一个经验法则,设计你的网站时假设JavaScript是被禁用的,然后,在此基础上,逐步增强你的网站。
11.不要给”setInterval”或”setTimeout”传递字符串参数
考虑下面的代码:
JavaScript
setInterval(
&document.getElementById('container').innerHTML += 'My new number: ' + i&, 3000
setInterval(&&"document.getElementById('container').innerHTML += 'My new number: ' + i", 3000&&);
不仅效率低下,而且这种做法和”eval”如出一辙。从不给setInterval和setTimeout传递字符串作为参数,而是像下面这样传递函数名。
JavaScript
setInterval(someFunction, 3000);
setInterval(someFunction, 3000);
12.不要使用”with”语句
乍一看,”with”语句看起来像一个聪明的主意。基本理念是,它可以为访问深度嵌套对象提供缩写,例如……
JavaScript
with (being.person.man.bodyparts) {
with (being.person.man.bodyparts) {&&&& arms = true;&&&& legs = true;&&}
而不是像下面这样:
JavaScript
being.person.man.bodyparts.arms =
being.person.man.bodyparts.legs=
being.person.man.bodyparts.arms = true;&&being.person.man.bodyparts.legs= true;
不幸的是,经过测试后,发现这时“设置新成员时表现得非常糟糕。作为代替,您应该使用变量,像下面这样。
JavaScript
var o = being.person.man.
var o = being.person.man.bodyparts;&&o.arms = true;&&o.legs = true;
13.使用{}代替 new Ojbect()
在JavaScript中创建对象的方法有多种。可能是传统的方法是使用”new”加构造函数,像下面这样:
JavaScript
var o = new Object();
o.name = 'Jeffrey';
o.lastName = 'Way';
o.someFunction = function() {
console.log(this.name);
var o = new Object();&&o.name = 'Jeffrey';&&o.lastName = 'Way';&&o.someFunction = function() {&&&& console.log(this.name);&&}
然而,这种方法的受到的诟病不及实际上多。作为代替,我建议你使用更健壮的对象字面量方法。
更好的做法
JavaScript
name: 'Jeffrey',
lastName = 'Way',
someFunction : function() {
console.log(this.name);
var o = {&&&& name: 'Jeffrey',&&&& lastName = 'Way',&&&& someFunction : function() {&&&&&&&&console.log(this.name);&&&& }&&};
注意,果你只是想创建一个空对象,{}更好。
JavaScript
var o = {};
var o = {};
“对象字面量使我们能够编写更具特色的代码,而且相对简单的多。不需要直接调用构造函数或维持传递给函数的参数的正确顺序,等”——
14.使用[]代替 new Array()
这同样适用于创建一个新的数组。
JavaScript
var a = new Array();
a[0] = &Joe&;
a[1] = 'Plumber';
var a = new Array();&&a[0] = "Joe";&&a[1] = 'Plumber';
更好的做法:
JavaScript
var a = ['Joe','Plumber'];
var a = ['Joe','Plumber'];
“javascript程序中常见的错误是在需要对象的时候使用数组,而需要数组的时候却使用对象。规则很简单:当属性名是连续的整数时,你应该使用数组。否则,请使用对象”——Douglas Crockford
15.定义多个变量时,省略var关键字,用逗号代替
JavaScript
var someItem = 'some string';
var anotherItem = 'another string';
var oneMoreItem = 'one more string';
var someItem = 'some string';&&var anotherItem = 'another string';&&var oneMoreItem = 'one more string';
更好的做法
JavaScript
var someItem = 'some string',
anotherItem = 'another string',
oneMoreItem = 'one more string';
var someItem = 'some string',&&&&&&anotherItem = 'another string',&&&&&&oneMoreItem = 'one more string';
…应而不言自明。我怀疑这里真的有所提速,但它能是你的代码更清晰。
(不好意思,第16 条被作者吃掉了)
17.谨记,不要省略分号
从技术上讲,大多数浏览器允许你省略分号。
JavaScript
var someItem = 'some string'
function doSomething() {
return 'something'
var someItem = 'some string'&&function doSomething() {&&&&return 'something'&&}
已经说过,这是一个非常糟糕的做法可能会导致更大的,难以发现的问题。
更好的做法
JavaScript
var someItem = 'some string';
function doSomething() {
return 'something';
var someItem = 'some string';&&function doSomething() {&&&&return 'something';&&}
18.”For in”语句
当遍历对象的属性时,你可能会发现还会检索方法函数。为了解决这个问题,总在你的代码里包裹在一个if语句来过滤信息。
JavaScript
for(key in object) {
if(object.hasOwnProperty(key) {
...then do something...
for(key in object) {&&&& if(object.hasOwnProperty(key) {&&&&&&&&...then do something...&&&& }&&}
参考 JavaScript:语言精粹,道格拉斯(Douglas Crockford)。
19.使用Firebug的”timer”功能优化你的代码
在寻找一个快速、简单的方法来确定操作需要多长时间吗?使用Firebug的“timer”功能来记录结果。
JavaScript
function TimeTracker(){
console.time(&MyTimer&);
for(x=5000; x & 0; x--){}
console.timeEnd(&MyTimer&);
function TimeTracker(){&& console.time("MyTimer");&& for(x=5000; x > 0; x--){}&& console.timeEnd("MyTimer");&&}
20.阅读,阅读,反复阅读
虽然我是一个巨大的web开发博客的粉丝(像这样!),午餐之余或上床睡觉之前,实在没有什么比一本书更合适了,坚持放一本web开发方面书在你的床头柜。下面是一些我最喜爱的JavaScript书籍。
《 | JavaScript面向对象编程指南》
《 | JavaScript语言精粹 修订版》
《 |jQuery基础教程 第4版》
《 |JavaScript学习指南》
读了他们……多次。我仍将继续!
21.自执行函数
和调用一个函数类似,它很简单的使一个函数在页面加载或父函数被调用时自动运行。简单的将你的函数用圆括号包裹起来,然后添加一个额外的设置,这本质上就是调用函数。
JavaScript
(function doSomething() {
name: 'jeff',
lastName: 'way'
(function doSomething() {&&&& return {&&&&&&&&name: 'jeff',&&&&&&&&lastName: 'way'&&&& };&&})();
22.原生代码永远比库快
JavaScript库,例如jQuery和Mootools等可以节省大量的编码时间,特别是AJAX操作。已经说过,总是记住,库永远不可能比原生JavaScript代码更快(假设你的代码正确)。
jQuery的“each”方法是伟大的循环,但使用原生”for”语句总是更快。
23.道格拉斯的 JSON.Parse
尽管JavaScript 2(ES5)已经内置了JSON 解析器。但在撰写本文时,我们仍然需要自己实现(兼容性)。道格拉斯(Douglas Crockford),JSON之父,已经创建了一个你可以直接使用的解析器。这里可以下载(链接已坏,可以在这里查看相关信息)。
只需简单导入脚本,您将获得一个新的全局JSON对象,然后可以用来解析您的json文件。
JavaScript
var response = JSON.parse(xhr.responseText);
var container = document.getElementById('container');
for(var i = 0, len = response. i & i++) {
container.innerHTML += '&li&' + response[i].name + ' : ' + response[i].email + '&/li&';
var response = JSON.parse(xhr.responseText);&&&var container = document.getElementById('container');&&for(var i = 0, len = response.length; i < len; i++) {&&&&container.innerHTML += '<li>' + response[i].name + ' : ' + response[i].email + '</li>';&&}
24.移除”language”属性
曾经脚本标签中的“language”属性非常常见。
JavaScript
&script type=&text/javascript& language=&javascript&&
<script type="text/javascript& language=&javascript&&&&...&&&/script>
然而,这个属性早已被弃用,所以请移除(译者注:html5 中已废弃,但如果你喜欢,你仍然可以添加)。
就这样吧,伙计
现在你已经学到了,24条JavaScript初学者的必备技巧。让我知道你高效技巧吧!感谢你的阅读。本系列的第三部分主题会是什么呢(思索中)?
第三部分在这里:《》
关于#20 的补充,下面是译者认为的一些好书,有兴趣的读者可以留言讨论
javascript模式(和上面JavaScript面向对象编程指南同一作者,这本书更好)
javascript设计模式
编写可维护的javascript(尼古拉斯新书)
高性能javascript(尼古拉斯 已绝版)
javascript语言精髓与编程实践
javascript高级程序设计(尼古拉斯)
关于作者:
可能感兴趣的话题
注意每次循环都要计算数组的长度,并且每次都要遍历dom查询“container”元素——效率严重地下!
——效率严重低下!
关于伯乐前端
伯乐前端分享Web前端开发,包括JavaScript,CSS和HTML5开发技术,前端相关的行业动态。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线HTML &pre& 标签君,已阅读到文档的结尾了呢~~
<HTML><HEAD>. <SCRIPT TYPE="TEXT/JAVASCRIPT">. FUNCTION CHANGENAVIGATION(ID) {
DOCUMENT.GETELEMENTBYID('POST').INNERHTML=DOCUMENT.GETELEMENTBYID(ID).
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
<HTML><HEAD> <SCRIPT TYPE="TEXT/JAVASCRIPT"> FUNCTION ...
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口pomelo 与 cocos2d-js 开发环境搭建 - Pomelo Club
pomelo 与 cocos2d-js 开发环境搭建
cocos2d-js 是整合了 cocos2d-html5 和 cocos2d-jsb,可以方便的开发部署到各种设备环境中 pomelo-cocos2d-js 则是对 pomelo-client-websocket 和 pomelo-cocos2d-jsb 的整合
本文以cocos code ide为开发环境说明如何搭建 pomelo 与 cocos2d-js 的开发环境
1:下载 cocos code ide
2:下载 cocos2d-js 配置cocos code ide
3:新建 cocos javascript project
这个时候,可以点击 build runtime 按钮,看是否能够成功编译 可以选择 win32 runtime(本文演示的是win32) 或者 android runtime
4:下载 pomelo-cocos2d-js 在项目根路径下面执行
--recursive
5:cocos2d-html5 环境搭建 修改index.html
&script src=&frameworks/cocos2d-html5/CCBoot.js&&&/script&
&script src=&pomelo-cocos2d-js/html5/build/build.js&&&/script&
&script type=&text/javascript&&
require(&boot&);
&script src=&main.js&&&/script&
6:cocos2d-jsb 环境搭建 修改main.js
cc.game.onStart = function() {
if (cc.sys.isNative === true) {
require(&pomelo-cocos2d-js/index.js&);
cc.view.setDesignResolutionSize(800, 450, cc.ResolutionPolicy.EXACT_FIT);
cc.view.resizeWithBrowserSize(true);
// load resources
cc.LoaderScene.preload(g_resources, function() {
cc.director.runScene(new HelloWorldScene());
cc.game.run();
7:测试chat修改app.js,添加
var pomeloChat = function() {
var pomelo = window.
var route = &gate.gateHandler.queryEntry&;
var uid = &uid&;
var rid = &rid&;
var username = &username&;
pomelo.init({
host: &127.0.0.1&,
port: 3014,
}, function() {
pomelo.request(route, {
}, function(data) {
pomelo.disconnect();
pomelo.init({
host: data.host,
port: data.port,
}, function() {
var route = &connector.entryHandler.enter&;
pomelo.request(route, {
username: username,
}, function(data) {
cc.log(JSON.stringify(data));
chatSend();
function chatSend() {
var route = &chat.chatHandler.send&;
var target = &*&;
var msg = &msg&
pomelo.request(route, {
content: msg,
from: username,
target: target
}, function(data) {
cc.log(JSON.stringify(data));
然后在 HelloWorldLayer 的 ctor 里面添加
pomeloChat();
8:本地把chatofpomelo-websocket跑起来
9:分别在jsb环境和html5环境测试
测试demo完整地址在
此demo只提供代码部分展示,cocos2d-js 库相关并没有上传
14:50重新编辑
您好,你的文章很棒,已经推荐到Cocos引擎中文官网。感谢您的分享。
socket error: Event build.js:1532socket close: CloseEvent
这是什么问题?socket关闭了?
@正常的哦,连接gate获取connector地址,chat里面是这样子的逻辑
楼主,我这边调试发现在pomelo.init的回调处死了。 并没有去连接connector服务器。 这是怎么回事啊?
connector 地址拿到了吗?
@ 没有拿到。init函数的执行完了,但是回调没执行,估计socket连接死掉了。。。
但是socket的接受里面也没见到去主动调用回调函数。init的回调在哪执行的呢。。。
@ 没有拿到。init函数的执行完了,但是回调没执行,估计socket连接死掉了。。。
但是socket的接受里面也没见到去主动调用回调函数。init的回调在哪执行的呢。。。
socket = new WebSocket(url); WebSocket没有初始化。。。这个WebSocket怎么没看到定义啊。。。。
socket = new WebSocket(url); WebSocket没有初始化。。。这个WebSocket怎么没看到定义啊。。。。
@ 服务端看到连接connector的日志了吗
我跟了一下跟到了libJSBindingForNetwork中的jsb_websocket.它的socket构造函数是跑了的,内部怎么会出现Socket连接不上呢?。。。
@ js客户端连接gate服务器,服务器一点反应都没有。。。。
@ 你是最新cocos2d-js吗?啥系统?
是最新的3.0R3. 系统?
按照Api的话,连接gate的步骤就这个pomelo.init.这里面用到的的WebSocket的连接怎么会出问题呢?为什么init的回调不执行啊?
楼主,在吗?
按照教程,无论mac还是web都可以调试成功,但我用cocos compile -p web -m release命令发布web的release版本时,发现pomelo-cocos2d-js 文件夹不会被复制到发布版里面,又或者pomelo的任何库都没有包含进发布版里面。我还尝试了发布成apk,可里面依然没有pomelo的东西。也尝试发布成mac版,但编译时发生错误(用ide调试时正常的)。
请问怎么正确地发布成release版本?
找到原因了,web发布版的,把pomelo-cocos2d-js 文件夹考到和index.html同级目录后,要确保&script src=&game.min.js&&&/script&&script src=&pomelo-cocos2d-js/html5/build/build.js&&&/script&的顺序不能颠倒,颠倒则运行失败。
但还有个问题,在mac上的sofari访问成功,可在iphone4上访问失败,不知道是不是iphone4sofari版本较低的原因,有谁有这方面经验吗?
sofari-&safari
@ iphone4 ios 几的?
@ 5.1.1,safari是默认的版本,不知道是几版本。我怀疑是safari的版本不支持某些socket。以前我用mac10.68的safari也是连接不上某个socket版本(具体不记得是哪种socket了)的pomelo,换成chrome就可以。而现在系统升到mac10.9,safari跟着升级后,就连上了。
@ 恩恩,应该是safari地版本的问题
objc[1164]: Class AVAudioPlayer is implemented in both /System/Library/Frameworks/AVFoundation.framework/Versions/A/Resources/libAVFAudio.dylib and /Users/chris/work/workspace/cocos/js/TestPomelo/runtime/mac/TestPomelo Mac.app/Contents/MacOS/TestPomelo Mac. One of the two will be used. Which one is undefined. 20:22:33.308 TestPomelo Mac[] Unable to load nib file: MainMenu, exiting
浏览器就可以正常访问,但是cocos为啥报错呢?cocos2d-js的版本是v3.1
TestPomelo Mac.app/../../../pomelo-cocos2d-js/index.js:25:Error: can&t open pomelo-cocos2d-jsb/lib/emitter/index.js: No such file or directory用xcode生成testPomelo.app后还会报这些文件找不到
用GIT下载pomelo-cocos2d-js 的时候,--recursive标志很重要,不然对应的几个库就下不来,提示找不到文件。下完之后,cocos code IDE的工程最好刷新一下,不然也可能产生奇怪的问题。
这就是我调了好一会儿才通过的经验。
pomelo-cocos2d-js中index.js第一句:var Util = require(&util&);就报错:Error: can&t open : No such file or directory是模块没有下载完整吗?
@ 现在是新版本了。你倒官方看看文档
@ 我用最新的(0.1.4)pomelo-cocos2d-js 在android的微信和qq浏览器会连不上服务器,服务器报could not find handle invalid data package,其他浏览器和cocos运行正常,大概是因为pomelo-cocos2d-js的pomelo版本过低导致socket的数据包类型或格式不对,我服务器用的是pomelo1.1.9,我把模板的build.js放到客户端,这时候微信和qq浏览器访问就正常了,但我不知道怎么整合代码,也报pomelo-cocos2d-js中index.js第一句:var Util = require(&util&);就报错:Error: can&t open : No such file or directory
pomelo-cocos2d-js/html5/build/build.js现在已经没有这个文件了啊!而且我也遇到了@ 的错误!文档要跟上啊,不然怎么用!哎
教程已过期“现在直接用 dist 下的文件,放入 cocos2d-js 的 jsList 里面即可,还是全局的 pomelo 对象”
app.configure(&production|development&, &connector&, function() {
app.set(&connectorConfig&, {
connector: pomelo.connectors.hybridconnector,
heartbeat: 10,
useDict: true,
useProtobuf: true,
type: &wss&,
key: fs.readFileSync(&./keys/server.key&),
cert: fs.readFileSync(&./keys/server.crt&),
});请问一下,服务器这样启用wss之后,cocos2d-js客户端要做些什么才能连得上啊?
@ 客户端下有 chat test 的例子的,你用 chatofpomelo-websocket 试试
throw new Error(
&secure random number generation not supported by this browser\n&+
&use chrome, FireFox or Internet Explorer 11&
就先不说wss了,我使用useCrypto的时候,在Chrome上调试是正常的,可是在cocos code ide 的Mac模拟器运行就会提示以上的错误,说是oldBrowser,没有crypto.getRandomValues这个方法。
我的客户端是在bearcat-cocos2d-js-example的基础上加了pomelo-cocos2d-js。
我硬把oldBrowser改写成Math.random生成随机数就可以了,不知道是否合适。
function oldBrowser(size, cb) {
var bytes = new Buffer(size);
for (var i = bytes.length - 1; i &= 0; i--) {
bytes[i] = Math.round(Math.random() * 256);
if (typeof cb === &function&) {
return process.nextTick(function () {
cb(null, bytes);
// throw new Error(
&secure random number generation not supported by this browser\n&+
&use chrome, FireFox or Internet Explorer 11&
pomelo.on(&onChat&, function(data) {
cc.log(&onChat:& + data);
cc.log(&onChat1:& + JSON.stringify(data));});
然后打印:JS: onChat:[object Object]JS: onChat1:{&msg&:&[object Uint8Array]&,&from&:&[object Uint8Array]&,&target&:&[object Uint8Array]&}
为什么是Uint8Array?
求help,在线等
我的是cocos2d-js
ios native环境运行的这个是不是不支持?
@ 支持的吧~ spiderMonkey 应该没问题的
我把3283行//
var b = buffer.readUInt8(pos);
改为var b = buffer[pos];虽然不报错了,但是我和你一样的问题onChat1:{&msg&:&[object Uint8Array]&,&from&:&[object Uint8Array]&,&target&:&[object Uint8Array]&}
@ 坛主在么?接收消息时报错../src/pomelo-cocos2d-js/dist/pomelo-cocos2d-js.js:3283:TypeError: buffer.readUInt8 is not a function我把3283行// var b = buffer.readUInt8(pos);改为var b = buffer[pos];虽然不报错了,但是我楼上一样的的问题onChat1:{&msg&:&[object Uint8Array]&,&from&:&[object Uint8Array]&,&target&:&[object Uint8Array]&},怎么才能显示文字呢
@ 晕倒,你 cc.log(obj.target) 即可
@ 坛主你好,我知道里面的对象有msg、from、target属性,但是obj.target不是文字 是[object Uint8Array],而且源码3283行报错,我改为var b = buffer[pos];这样对吗
mac环境 跑native环境 接收消息时报错../src/pomelo-cocos2d-js/dist/pomelo-cocos2d-js.js:3283:TypeError: buffer.readUInt8 is not a function
cocos2d-js加载js文件超级简单。 std::string jsFileContent = futil-&getStringFromFile(fullPath); if (!jsFileContent.empty()){
ok = JS::Compile(cx, obj, op, jsFileContent.c_str(), jsFileContent.size(), &script);}
这个地方可以做很多工作,比如从加密的zip包取出脚本文件,然后,把文件内容注入进去,等等。操作完毕,记得缓存。filename_script[fullPath] =这点,越来越像lua了。
pomelo 与 cocos2d-js 搭配目前来说还是幻想。折腾了一段时间,cocos2d-js 3.8版本,单单os文件就达到42MB,然后又要在js执行序列化的运算。我不知道有多少手机支撑得住,即使支撑的住,估计发热也厉害。以前用lua开发,序列化在C++实现,定制化的那种序列化,使用socket连接。在游戏场景中,洪水般的消息喷出来,勉强还可以支持。手机玩半个小时就烫手。

我要回帖

更多关于 javascript放在哪里 的文章

 

随机推荐