一点背景。我有一个在嵌入式 IE 浏览器中运行的映射程序。 IE 公开了我用来调用外部(桌面)方法的 IHTMLDocument2 = interface(IHTMLDocument)。效果很好,但 Google 将很快停止支持 IE,Edge 不支持外部调用。
interface IMyExternal: IDispatch
{
[id(0x000000C9)]
HRESULT _stdcall ShowQtrMinBounds([in] BSTR QtrNorth, [in] BSTR QtrSouth, [in] BSTR QtrEast, [in] BSTR QtrWest);
[id(0x000000CA)]
HRESULT _stdcall ShowMarker([in] BSTR MsgStream, [in] BSTR ticketID);
[id(0x000000CD)]
HRESULT _stdcall ManageQtrGrid([in] BSTR functionName, [in] BSTR retState);
[id(0x000000CE)]
HRESULT _stdcall SaveQtrMinutes([in] BSTR qtrMinuteCode);
[id(0x000000CF)]
HRESULT _stdcall WhoIsHere([in] BSTR qtrMinuteCode);
};
为了解决这个问题,我决定写入一个文件。我旋转了一个线程来寻找应该与方法命名相同的文本文件。文件内容将是参数。
我的问题是我不是一个成熟的 JS 开发人员。我已经搜索了可用的脚本来帮助我入门。我发现:
Title
Text to Save:
Filename to Save As:
function saveTextAsFile()
{
var textToWrite = document.getElementById("inputTextToSave").value;
var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'});
var fileNameToSaveAs = document.getElementById("inputFileNameToSaveAs").value;
var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
downloadLink.innerHTML = "Download File";
if (window.webkitURL != null)
{
downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
}
downloadLink.click();
}
以上原则上有效,但我不能在实践中使用它。我不能使用用户输入。这是一个典型的调用。
function whoBeHere(point) {
var LeftLat = (Math.floor(point.lat() / llOffset) * llOffset);
var LeftLng = (Math.floor(point.lng() / llOffset) * llOffset);
var qtrMinute = ddToQM(LeftLat, LeftLng);
external.WhoIsHere(qtrMinute);
}
我需要让我的脚本写入一个文件,在上述情况下,它将被命名为“WhoIsHere”,其内容将是“qtrMinute = 34.0, 82.44”
我看过 Node.JS,但这必须发生在客户端。
更多信息。我的程序在我称之为 Quarter Minutes 的 googlemaps 上创建了一个网格。我的用户在我称为 fencing 的过程中使用鼠标选择 qtr mins。
function SaveQtrMin() {
for (var m in qtrArray) {
external.SaveQtrMinutes(qtrArray[m].qtrMinute);
}
}
现在写我调用我从 IE 的 Winapi.ActiveX 实例化的 COM 对象。它公开了允许我写入桌面的方法。SaveQtrMinutes(qtrArray[m].qtrMinute) 是我 10 年前在 Delphi 中编写的一个 COM 对象。 Google 正在限制从 IE 访问 Google 地图,因此我的 COM 对象将停止运行。
因此,为了使其正常工作,我决定与其调用 Edge 不支持的 Delphi 方法,不如直接写入文件。
我可以通过旋转在文件夹中查找文件的线程来监控何时写入文件。如果找到,它将运行文件中写入的过程。
认为您在 Google 地图中点击了餐厅。我希望浏览器将餐厅名称写入文件。我将运行一个进程,不断查看该文件夹,如果它是一个文件,它会打开它并以某种方式响应它。
谢谢
暂无评论内容