日期:2014-05-16 浏览次数:20474 次
以前,使用过一段时间amChart和amStock。今天,一个同事问我:他在看例子中的javascrip _control这个js交互操作的例子,怎么也不能正确运行。
打开一运行,图像正常。但是操作js就报:flashMoive元素未定义的错误!!!
flashMoive怎么会没有定义呢?打开代码检测,很快发现
// <![CDATA[ var so = new SWFObject("amstock.swf", "stock_chart", "800", "600", "8", "#FFFFFF"); so.addVariable("path", ""); so.addVariable("chart_id", "stock_chart"); //so.addVariable("settings_file", encodeURIComponent("amstock_settings.xml")); so.addVariable("settings_file", escapeCN("a.xml")); so.write("flashcontent"); // ]]> function escapeCN(str) { var eStr = "" var reg = /[^\x00-\xff]/ var s = str.split('') for(var c=0; c<s.length; c++) { if(reg.test(s[c])) { eStr += s[c] } else { eStr += escape(s[c]) } } return eStr }
?
上面这段代码加载插件,然后会自动调用amChartInited这个方法:amChartInited方法代码如下
////////////////////////////////////////////////////////////////////////////////////////// // Functions that are called by the chart //////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// // CHART INITED ////////////////////////////////////////////////////////////////////////// // amChartInited(chart_id) // This function is called when the chart is fully loaded and initialized. function amChartInited(chart_id){ // get the flash object into "flashMovie" variable flashMovie = document.getElementById(chart_id); // tell the field with id "chartfinished" that this chart was initialized document.getElementById("chartfinished").value = chart_id; }?
?
从这段代码可以发现:flashMovie是在这段代码中声明的!
加载这个过程应该就是问题症结所在:IE7等浏览器加载元素时,js操作还没有加载成功的元素的时候进行操作出现的问题。
解决方式:把所有的js放在页面元素之后。
?
郁闷一把:scrip t被javaeye屏蔽了,~~我的天,以后javascrip t这个单词都不能用了!!!BS一把