Javascript Firefox和IE赢得了';t如果值在变量中,则调用window.location.href

Javascript Firefox和IE赢得了';t如果值在变量中,则调用window.location.href,javascript,firefox,google-chrome,mailto,Javascript,Firefox,Google Chrome,Mailto,我试图调用存储在变量中的mailto:URI。当我执行window.location.href=mailto\u链接时Firefox给了我以下错误: NS_ERROR_ILLEGAL_VALUE: Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMLocation.href] window.location.href = mailto_link;` IE所说的: Obje

我试图调用存储在变量中的
mailto:
URI。当我执行
window.location.href=mailto\u链接时
Firefox给了我以下错误:

NS_ERROR_ILLEGAL_VALUE: Component returned failure code: 0x80070057        
(NS_ERROR_ILLEGAL_VALUE) [nsIDOMLocation.href] 

window.location.href = mailto_link;` 
IE所说的:

Object doesn't support this property or method
该代码在Chrome上运行,但在IE和Firefox上都不起作用

我的原始功能:

function email()
{
    var nom = $('#nom').val();nom = encodeURIComponent(nom);
    var compagnie = $('#compagnie').val();compagnie = encodeURIComponent(compagnie);
    var rue = $('#rue').val();rue = encodeURIComponent(rue);
    var ville = $('#ville').val();ville = encodeURIComponent(ville);
    var province = $('#province').val();province = encodeURIComponent(province);
    var cp = $('#cp').val();cp = encodeURIComponent(cp);
    var remarques = $('#remarques').val();if(remarques ==""){remarques = "Aucune remarque.";}remarques = encodeURIComponent(remarques);
    var quantite = $('#quantite').val(); 
    var email= "someEmail@somedomain.com";
    var subject= "Nouvelle commande";
    var body_message= "%0D%0D%0D%0D"+nom+"%0D"+compagnie+"%0D"+rue+"%0D"+ville+", "+province+"%0D"+cp+"%0D%0D%0DRemarques:"+remarques+"%0D%0D Quantit%E9:"+quantite;
    var mailto_link = 'mailto:'+email+'?subject='+subject+'&body='+body_message;
    window.location.href = mailto_link;
}
更新1

我发现了IE出现问题的原因,尽管我仍在寻找Firefox的解决方案。IE的问题是我有一个
console.log()无法识别(IE8及更低版本)

下面是mailto链接内容的
console.log()

mailto:someEmail@someDomain.com?subject=Nouvelle commande&body=Charger %0Dmodems des %CEseulement%0D%0D%0D%0Djshad%0Daskjda%0Daskdj%0Daskdj, askdj%0DJ9P%204A1%0D%0D%0DRemarques:asldk%0D%0D Quantit%E9:14 

我尝试了这个,它对我来说很有效,但我认为错误代码可能与您在firefox或IE中安装的某个插件有关,重新启动浏览器应该会有所帮助

这可能是由于插件/用户脚本正在执行某些操作造成的 在google重定向时对页面进行操作/修改 搜索结果。您可以尝试在firefox中运行firefox 使用安全模式时出现问题,并查看该错误是否仍然存在。如果不是 禁用所有插件&重新启用一个,以找出哪个插件 一个是导致它的原因(您可能需要重新启动 浏览器(在每个浏览器之后)


Firefox显然无法处理URL中128个以上的ISO 8859-1字符。如果从记录的示例中删除
%CE
(Î)和
%E9
(é),问题就会消失。不幸的是,我能想到的唯一解决办法是手动替换扩展字符,比如使用等效字符(可能是HTMLEntities*)。因为在Javascript中没有本机函数可以这样做,这可能会让人非常恼火

**因为HTMLEntities只能在HTML上下文中正确呈现,并且mailto:uri生成纯文本消息体,所以这是一个不完美的解决方案。下面是一个可以实现这一点的函数,但是消息将有
和#233等等。也许一个更方便的解决办法是,如你在评论中提到的那样*



当然,只有当重音字符对于理解来说是绝对必要的,并且使用相同基本字符的许多重音之间可能存在重叠时(如
A
)。编辑:刚刚在Mac上试用过,它对Firefox和Chrome都有效。无法测试IE…你确定变量中没有什么内容?IE中会出现什么错误?具体“email”、“subject”和“body_message”变量的值是多少?您可能应该在这些值上使用
encodeURIComponent()
。我在任何地方都使用
encodeURIComponent()
(正如您在新编辑的问题中看到的那样)。Firefox在处理URL中的扩展字符时似乎存在某种问题。如果从记录的示例中删除
%CE
(Î)和
%E9
(é),问题就会消失。不幸的是,我能想到的唯一解决办法是手动将扩展字符(如那些扩展字符)替换为等效的HTMLentity。由于Javascript中没有本机函数可以这样做,这可能会让人非常恼火。这并没有改变Firefox的情况(遗憾的是),IE有一个不同的问题,现在已经解决了。谢谢你的贡献。
function encodeISO8859 (str) {
    var rstr="";
    for(var i=0; i<str.length; i++) {
        var c = str.charCodeAt(i);
        if(c>191&&c<=255&&!(c==215||c==247)){
            console.log(c);
            rstr += "&#"+c+";";
        } else {
            rstr += str.charAt(i);
        }
    }
    return rstr;
}
var nom = $('#nom').val();nom = encodeURIComponent(encodeISO8859(nom));