据我所知,Firefox浏览器的“另存为..”功能也使用此功能,因此我尝试在代码中实现此功能。
除了保存的CSS和javascript文件外,其他所有程序都运行良好。它们包含奇怪的数字。 Firefox的“另存为..”不执行此操作。我做错什么了吗?
我做了什么:
webBrowserPersist.saveDocument(content.document, file, dir, null, null, null);
我错过了什么?我应该更改MIME或编码标志吗? (顺便说一句,我不理解这些第四和第五参数)
提前致谢。
最佳答案
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWebBrowserPersist#saveDocument%28%29
第四个参数用于放置编码标志。因此,从上面的页面(我们寻找其中包含单词encode的标志),我们可以像这样传递给它:
persist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(Components.interfaces.nsIWebBrowserPersist);
persist.saveDocument(gBrowser.contentDocument, localFile, dataPath, persist.ENCODE_FLAGS_ENCODE_BASIC_ENTITIES, null, null);
第五,其格式化标志。我们可以通过按位运算符或运算符来使用倍数,例如:
persist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(Components.interfaces.nsIWebBrowserPersist);
persist.saveDocument(gBrowser.contentDocument, localFile, dataPath, null, persist.PERSIST_FLAGS_FORCE_ALLOW_COOKIES | persist.PERSIST_FLAGS_BYPASS_CACHE, null);
像那样的东西
最后一个参数是关于如何包装它的。我猜有一些包装标志。也许尝试传递一个数字。
工作示例:
var file = "c:\\test2.htm";
var data = "c:\\test2_data";
localFile = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
localFile.initWithPath(file)
dataPath = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile)
dataPath.initWithPath(data)
persist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]
.createInstance(Components.interfaces.nsIWebBrowserPersist);
persist.saveDocument(gBrowser.contentDocument, localFile, dataPath, null, null, null);
被窃取自:https://github.com/aptana/Jaxer/blob/f7994fc75a768c9873f094e29868c22e88b46b50/server/src/mozilla/embedding/qa/jstests/nsIWebBrowserPersistTest2.txt#L77
顺便说一下,这是保存我们功能从菜单中使用的功能:
/*
function saveDocument(aDocument, aSkipPrompt)
{
if (!aDocument)
throw "Must have a document when calling saveDocument";
// We want to use cached data because the document is currently visible.
var ifreq =
aDocument.defaultView
.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
var contentDisposition = null;
try {
contentDisposition =
ifreq.getInterface(Components.interfaces.nsIDOMWindowUtils)
.getDocumentMetadata("content-disposition");
} catch (ex) {
// Failure to get a content-disposition is ok
}
var cacheKey = null;
try {
cacheKey =
ifreq.getInterface(Components.interfaces.nsIWebNavigation)
.QueryInterface(Components.interfaces.nsIWebPageDescriptor);
} catch (ex) {
// We might not find it in the cache. Oh, well.
}
internalSave(aDocument.location.href, aDocument, null, contentDisposition,
aDocument.contentType, false, null, null,
aDocument.referrer ? makeURI(aDocument.referrer) : null,
aDocument, aSkipPrompt, cacheKey);
}
*/
saveDocument(gBrowser.contentDocument, true)
这是保存菜单项使用的功能。
关于javascript - NSIWebBrowserPersist的saveDocument()函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24570831/