我需要将一个复杂的Javascript对象保存到文件中以备后续调查。该对象非常庞大,拥有50多个方法和属性。
我可以在Firefox-Firebug的DOM页面中看到该对象及其方法和属性(及其值),但我无法从那里将它保存到文件中。
我想要保存对象及其当前属性值,而不是HTML文档。文件的格式可以是HTML、JSON或其他任何格式。
如何保存该对象?
我需要将一个复杂的Javascript对象保存到文件中以备后续调查。该对象非常庞大,拥有50多个方法和属性。
我可以在Firefox-Firebug的DOM页面中看到该对象及其方法和属性(及其值),但我无法从那里将它保存到文件中。
我想要保存对象及其当前属性值,而不是HTML文档。文件的格式可以是HTML、JSON或其他任何格式。
如何保存该对象?
嗯... 有一些你可以做的事情,但我不能说它有多么丑陋。
你可以像这样执行:JSON.stringify(my_big_javascript_object)
然后将生成的 JSON(纯文本)保存在文件中。
稍后,你可以使用某些 JSON 查看器,比如 http://jsonviewer.stack.hu/查看这些值。
现在可以使用Blob API实现:
function downloadObject(obj, filename){
var blob = new Blob([JSON.stringify(obj, null, 2)], {type: "application/json;charset=utf-8"}).slice(2,-1);
var url = URL.createObjectURL(blob);
var elem = document.createElement("a");
elem.href = url;
elem.download = filename;
document.body.appendChild(elem);
elem.click();
document.body.removeChild(elem);
}
你可以在这里阅读更多相关信息:https://developer.mozilla.org/en-US/docs/Web/API/Blob
要使用它,需要一个包含实时DOM的网页,如果你正在调试页面上的JavaScript,则应该可以正常工作。
这对我来说很有效。
//Initialization of object to save
var objectToSave={first:'string', second: function(){}};
//Start of saving method
var textToSave='';//String to be saved
var count=0;
for(var i in objectToSave){
//Adding every key name + type + text value to string
textToSave+=objectToSave[i].constructor.name+' '+ Object.keys(objectToSave)[count]+' = '+objectToSave[i]+'\n';
count++;
}
//Saving string to file using html clicking trick
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:attachment/text,' + encodeURI(textToSave);
hiddenElement.target = '_blank';
hiddenElement.download = 'myFile.txt';
hiddenElement.click();
该方法的结果将保存为文本文件,其中包含以下内容:
字符串 first = string
函数 second = function (){}
var ajax_object // Your object
.ajax({
type: "POST",
url: "tofile.php",
data: ajax_object,
});
然后使用服务器端脚本(例如使用PHP)将其写入HTML文件:
// File: tofile.php
$ajax_object // Object, which You have passed using AJAX
ob_start();
print_r("<pre>".print_r($ajax_object, true)."</pre>");
$var = ob_get_contents();
ob_end_clean();
$fp = fopen('somefile.htm', 'w');
fputs($fp, $var);
fclose($fp);
在 somefile.htm 中的输出将类似于以下内容:
Some_Object Object
(
[some_element] => 123
[some_array] => Array
(
[element1] => 456
[element2] => 789
[element3] => 012
)
)
如果您想知道如何仅使用Javascript将对象保存到文件中,而不需要服务器端语言,那么恐怕是不可能的。