我正在尝试使用JavaScript将字符串保存到外部文件。以下是我正在执行的内容。
var mytext = "1111#1111"
var a = document.body.appendChild(document.createElement("a"));
a.download = "My_output.html";
a.href = "data:text/html," + mytext;
a.click();
此代码使用Chrome完美运行。但是对于Firefox,它会在“#”之前停止。当我查看结果输出文件时,我看到以下内容:
Chrome中的结果如下所示
1111#1111
Firefox中的结果如下所示
1111
在我看来,标签正在破坏某些东西。任何人都可以帮助我理解为什么字符串中的“#”在Firefox中引起了悲痛而不是Chrome?我试过用双引号和单引号包装字符串,但它似乎没有任何效果。
有什么想法吗?
答案 0 :(得分:4)
您需要在提交之前将URL编码添加到字符串中。
var mytext = encodeURIComponent( "1111#1111" );
var a = document.body.appendChild(document.createElement("a"));
a.download = "My_output.html";
a.href = "data:text/html," + mytext;
a.click();
可在此处找到更多信息:encodeURIComponent
编辑:而且,这只是我的顺便说一句,但为什么你甚至会做数据:text / html?似乎没必要。您可以通过Ajax轻松提交(或者如果您有可用的库,则使用jQuery' s .ajax)。如果您碰巧使用jQuery,那么所有这些可能会更容易一些。无论哪种方式,希望有所帮助。
答案 1 :(得分:3)
如果我在firefox中使用它,那就很好了
var mytext = encodeURIComponent("1111#1111");
var a = document.body.appendChild(document.createElement("a"));
a.download = "My_output.html";
a.href = "data:text/html," + mytext;
a.click();
诀窍一如既往地编码uri组件。而你所传递的是一个uri组件。
这样所有特殊字符都喜欢? #和+和%将被正确解析。