我如何下载mobileconfig文件(下面的JavaScript)或iOS如何处理它的问题(不确定)



所以我创建了一些东西,允许人们创建和下载创建的。mobileconfig文件,而不需要mac(因为AC2只在macOS上),在设备上做要快得多。问题是,当人们下载它时,它提示为"是否要下载(文件名.mobileconfig)",而不是通常的"此网站正在尝试下载配置文件"。你想允许这样做吗?这介绍了几个额外的步骤,而不是"单击允许,检查设置,然后安装"。选项,这就是我要的。

我知道,如果URL指向mobileconfig文件,它将提示正确的方式,除了需要。mobileconfig文件存储在托管我的网站的服务器上,我想避免,如果可能的话,坚持只使用HTMl和JavaScript。

这是正在下载的JavaScript文件:

function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/xml;charset=UTF-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
document.getElementById("DownloadProfileBTN").addEventListener("click", function(){
var text = document.getElementById("generated_profile_content").textContent;
var filename = "config.mobileconfig";
download(filename, text);
});

你可能无法控制这个。

我在iOS、MacOS和Windows上的四种主要浏览器(没有Android和Windows手机)上进行了广泛的测试。截至2022年第一季度,大多数主要的移动使用javascript将文件传输到浏览器后,浏览器将文件保存到磁盘的用户体验仍然很糟糕。一个值得注意的例外是iOS上的Safari,它有一个独特的(而且令人愉快的)UI下载提示。

大多数其他手机浏览器只有一个路径:尝试在浏览器视窗中呈现传输的文件,并依靠用户长按可见的呈现并选择"另存为…"。无论该文件是大多数浏览器可以原生渲染的文件(例如图像),还是像Office文档这样的复杂格式,都是如此。Edge有一个很酷的页脚和下载按钮,但当我做我的研究时,它实际上从来没有工作过。(微软花了20年时间来掌握构建糟糕的web浏览器的艺术。)

桌面浏览器的整体表现要好得多:示例中的<a download="filename" ...>方法在主要浏览器中提供了无缝的即时下载体验。您可以通过编程方式创建该链接,单击它,然后在短暂延迟后将其从DOM中删除,然后该文件将立即出现在用户的正常下载文件夹中。

IIRC,这种情况是不同的,如果你使用javascript来管理下载。也就是说:只是有一个锚,其href指向一个URL,将响应Content-Disposition: attachment标头。这对于前端来说要简单得多,但是人们不使用这种方法还有其他原因。如果这就是你的情况,你可能会被卡住。

这些都不是.mobileconfig文件所特有的。我已经很长时间没有研究过这些内容了,但我似乎记得使用这种类型的移动平台有特殊的处理方式——但是,只有当它是直接下载而不是通过JS传输时,

注意,这实际上与传输本身没有任何关系。这些问题源于这样一个事实:在JS传输了数据之后,它仍然需要做一些事情来指示浏览器将数据保存为磁盘上的文件。转移本身是不起眼的,不会产生任何问题,但如果你不保存它,那就毫无意义了。将文件写入磁盘的选项不多。这个功能空间仍然是相当糟糕的,我怀疑,因为给随机网页创建本地文件的权力有很多极其重要的安全隐患。

另一个有趣的挑战是特征检测在这里不起作用。从技术上讲,保存文件的基本工具确实存在于所有主流浏览器中(FileReader、objecturl等),它们只是工作方式不同(而且很糟糕)。(我认为这是古德哈特定律在起作用。)Edge有专有的msSaveBlob,但就像我说的,他们的页脚按钮看起来还是很劣质。


我还没有机会测试的另一种选择是使用WebWorker来保存文件。IIRC, WebWorkers具有将文件写入磁盘的能力,我希望它可以在所有浏览器中以相同的方式工作。但是我的项目时间表没有足够的时间花一两天来试验。

最新更新