具體例子:從How Big is Your Haystack?如何調試外部評估和演示腳本
的haystack.js
腳本我搜索的答案,一切似乎指向使用//# sourceURL=name.js
評論。然而,如何完成這個機制避開了我(也許我只是密集)。
每個人總是指向Debugging JavaScript,但演示已損壞(同源錯誤)。其他常見示例不能提供有關使用諸如此類的外部腳本的信息。
我試過使用Live Edit來插入sourceURL註釋,但到目前爲止,eval腳本從來沒有出現在Sources選項卡中。
有人請走過我完成這項任務的步驟?
UPDATE:這已被證明是一個有趣和煩人的努力。這種特殊的網站讓任務不必要具有以下併發症困難:
的haystack.js腳本包括
document.write()
語句(其中加載使用其他腳本)。腳本重新加載之前必須刪除這些內容,否則DOM將被清除。作者在代碼上使用了一種奇怪的反向密碼形式的模糊處理。因此,在刪除混淆之後,但在評估發生之前,必須修改代碼(包括
sourceURL
)。
我克服了部分解決方案。 jQuery的加載到頁面後,我運行此腳本:
$.ajax({
url: '/js/haystack.js',
dataType: 'text'
}).done(function(data) {
// Remove document.write() statements and append sourceURL comment after obfuscation is removed
var refactored = data.replace(/return d/, "return d.replace(/document\.write[^;]+;/g, '') + '\\n//# sourceURL=haystack.js\\n';");
$('head').append('<script type="text/javascript">' + refactored + '</script>');
});
現在haystack.js出現在(無域)來源標籤的樹。斷點可以設置,但有一些奇怪的行爲。似乎DOM事件處理程序仍然綁定到原始腳本(重新加載的腳本處理程序中的斷點永遠不會到達)。執行pageInit()再次將處理程序重新綁定到修改後的腳本,但頁面更新仍然不穩定。不知道爲什麼行爲依然存在。我可以遍歷代碼,並且所有內容都正常顯示,但頁面更新似乎落後於代碼。代碼違反幾乎所有JavaScript最佳實踐的事實無疑是一個因素。
你說的是調試腳本嗎?你不能使用'try'和'catch'嗎? – Cilan
好問題。 +1 –
即使已經有一段時間了,我也想添加它。 https://chrome.google.com/webstore/detail/switcheroo-redirector/cnmciclhnghalnpfhhleggldniplelbg?hl=zh_CN將允許finagle腳本標記,以便您可以將其指向本地副本(您已解開),然後調試: https://chrome.google.com/webstore/detail/switcheroo-redirector/cnmciclhnghalnpfhhleggldniplelbg?hl=zh-CN –