客戶端遇到應用程序的某些問題,無法安裝調試Flash播放器,這意味着調試非常困難。非調試AS3應用程序的顯示跟蹤
有沒有人知道在舞臺上的文本框中顯示系統跟蹤消息的方法?這樣我就可以通過追蹤到他們的屏幕來發現錯誤。
我想一個解決方法是嘗試/捕捉所有的應用程序,但這不是理想的和非常麻煩的。
感謝
客戶端遇到應用程序的某些問題,無法安裝調試Flash播放器,這意味着調試非常困難。非調試AS3應用程序的顯示跟蹤
有沒有人知道在舞臺上的文本框中顯示系統跟蹤消息的方法?這樣我就可以通過追蹤到他們的屏幕來發現錯誤。
我想一個解決方法是嘗試/捕捉所有的應用程序,但這不是理想的和非常麻煩的。
感謝
我最近開始做的是使用ExternalInterface調用調試閃存,使用Firebug控制檯,或任何控制檯瀏覽器支持。
我們使用JavaScript的這個片段來自Html5Boilerplate:
window.log = function(){
log.history = log.history || [];
log.history.push(arguments);
arguments.callee = arguments.callee.caller;
if(this.console) console.log(Array.prototype.slice.call(arguments));
};
(function(b){function c(){}for(var d="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,time,timeEnd,trace,warn".split(","),a;a=d.pop();)b[a]=b[a]||c})(window.console=window.console||{});
然後用
ExternalInterface.call('window.log','Debug text goes here');
我使用這樣的插入隱藏日誌面板到應用程序的情況下做的。這個面板應該在按下一些密鑰序列後打開。當你需要一些信息時,你會向客戶發現序列並要求複製併發送他在日誌文本框中看到的所有內容。在此之前,甚至沒有人知道它在那裏。這適用於您開發的任何應用程序,不僅適用於網絡應用程序。那麼,如果你正在開發一個web應用程序,你甚至可以通過一些cgi腳本和截圖發送報告給你自動執行。你只要求你的客戶按一些特定的東西,然後你檢查你的郵件。
您可能還需要使用已向UncaughtErrorEvents:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/UncaughtErrorEvents.html?filter_flash=cs5&filter_flashplayer=10.1&filter_air=2
下面是一些簡單的代碼,我用鎖調試輸出。
protected const inputHistory : Array = [];
private var lockPhrase : String;
private var isUnlocked : Boolean;
private function onKeyUp(event : KeyboardEvent) : void
{
isUnlocked = checkLock();
if (event.keyCode == Keyboard.SPACE) {
if (event.shiftKey) {
if (isUnlocked) {
// log panel opens by Shift + Space shortcut
// only if it was previously unlocked
toggle(true);
}
}
}
if (lockPhrase && lockPhrase.length) {
inputHistory.push(event.charCode);
while (inputHistory.length > lockPhrase.length) {
inputHistory.shift();
}
}
}
private function checkLock() : Boolean
{
if (isUnlocked || lockPhrase == null || lockPhrase.length == 0) {
return true;
}
if (inputHistory.length != lockPhrase.length) {
return false;
}
var match:uint = 0;
for (var i : uint = 0; i < lockPhrase.length; i+=1) {
if (lockPhrase.charCodeAt(i) == inputHistory[i]) {
match += 1;
}
}
return (match == lockPhrase.length);
}