bug 反馈

By shiqiren at 2015-08-08 • 1人收藏 • 776人看过

Uncaught TypeError: Cannot read property 'contentWindow' of null

new.function.js?version=3.3.6:35


出现条件:当页面已经有编辑器后,再打开一个有编辑器的页面,就会出现


如:打开一个话题的详细页面后,再打开“发新帖”会出现

24 个回复 | 最后更新于 2015-08-09
2015-08-08   #1

new.function.js?version=3.3.6:286 


Uncaught TypeError: Cannot read property 'Title' of undefined

2015-08-08   #2

如果回复话题,提交后,出现:


Uncaught TypeError: Cannot read property 'simpleupload' of undefined


ueditor.all.min.js?version=3.3.6:114 



2015-08-08   #3

第一个bug的参考解决:

var ueditor_id='ueditor_0';
var frames=document.getElementsByTagName('iframe');
for(var i=0;i<frames.length;i++){
    if(frames[i].id.indexOf('ueditor_')>-1){
        ueditor_id=frames[i].id;
        break;
    }
}
document.getElementById(ueditor_id).contentWindow.document.body.onkeydown = function(Event){
    CtrlAndEnter(Event, false);
};


2015-08-08   #4

第2个bug的疑问:


发新话题的提交form叫NewForm,回复的叫reply,理论上是不是应该都叫NewForm?

2015-08-08   #5

Thanks! 

全站异步加载是十几天前花了半天时间改的,因为最近一直在驾校,所以一些没造成明显影响的Bug没有被及时检出,感谢反馈!

如果你有GitHub账号的话,不如把这些代码以pull request的方式合并到项目中,这样也可以在contributors中挂个名字。

https://github.com/lincanbin/Carbon-Forum/graphs/contributors

2015-08-08   #6

回复#5 @lincanbin :

你做过驾校的项目?

2015-08-08   #7

回复#4 @shiqiren :

NewForm是其实是一个Create New Topic的Form,我随手挑的一个当时认为比较合适的写法来命名,现在来看可能是历史遗留问题了。

2015-08-08   #8

回复#6 @shiqiren :

我准备在考驾照啊……

2015-08-08   #9

回复#7 @lincanbin :

把回复的form的name从reply改为NewForm是否会有未知影响?我看代码NewForm的使用频率很高

2015-08-08   #10

回复#9 @shiqiren :

最好不要,因为网站改成全异步后,理论上最好每个不同功能的页面都不要出现同样的命名,包括ID、Name、Function等等。

因为JavaScript也是以异步方式载入,并且常驻在Head标签中,随着打开的页面增加,载入的JavaScript也会逐渐增加最终达到一个稳定值,从而实现一个比较快的加载速度。


https://github.com/lincanbin/Carbon-Forum/blob/master/static/js/global.js#L141

异步载入静态资源的代码在这里:

//异步非阻塞加载JavaScript脚本文件    
function loadScript(url, callback) {    
	var script = document.createElement("script");    
	script.id = md5(url);    
	script.type = "text/javascript";    
	if (script.readyState) { //IE    
		script.onreadystatechange = function() {    
			if (script.readyState == "loaded" || script.readyState == "complete") {    
				script.onreadystatechange = null;    
				callback();    
			}    
		};    
	} else { //Others    
		script.onload = function() {    
			callback();    
		};    
	}    
	script.src = url;    
	if(document.getElementById(script.id) == undefined){    
		document.getElementsByTagName("head")[0].appendChild(script);    
	}else{    
		callback();    
		//console.log(url);    
	}    
}


2015-08-08   #11

回复#10 @lincanbin :

所以NewForm只应该出现在新建话题页面吧,其他的地方,是还没改过来的

2015-08-08   #12

回复#11 @shiqiren :

特地使用了不同的命名,其他地方的命名应该也没大问题。

2015-08-08   #13

回复#12 @lincanbin :

已经测试出来,比如回复页面,会调用new.function.js的RecoverContents方法,正常情况应该调用reply.function.js的方法的,应该是异步的js出现了混乱吧

2015-08-08   #14

回复#13 @shiqiren :

对的,全异步造成了redefine function,其中一个函数应该改成不同的名字,全站异步后,不应该再出现有同样的function名。

2015-08-08   #15

建议可以用

reply.RecoverContents()  ;new.RecoverContents()这样形式区分

2015-08-08   #16

回复#15 @shiqiren :

我觉得就给加个前缀就行,就像

ReplyRecoverContents()
NewRecoverContents()

如果你有GitHub账号,不如你去加?

还是我去加?

2015-08-09   #17

回复#16 @lincanbin :

我的代码改动太大了。。。

2015-08-09   #18

回复#17 @shiqiren :

那还是我来改好了。

2015-08-09   #19

回复#18 @lincanbin :

如果回复话题,提交后,出现:


Uncaught TypeError: Cannot read property 'simpleupload' of undefined


ueditor.all.min.js?version=3.3.6:114

我对这个编辑器不熟悉,调试是知道在异步刷新后,对象清空了的问题,但不知道如何改

登录后方可回帖

登 录
信息栏
购买PHP虚拟主机 / VPS

Carbon Forum是一个基于话题的高性能轻型PHP论坛

下载地址:Carbon Forum v5.0.1
QQ群:12607708(QQ我不常上)

donate

手机支付宝扫描上方二维码可向本项目捐款

Loading...