2

mailto:変数に格納されているURIを呼び出そうとしています。Firefoxを実行するとwindow.location.href = mailto_link;、次のエラーが発生します。

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

私はまだFirefoxで問題を解決しようとしていますが、IEの問題の原因を突き止めました。IEの問題は、console.log();認識されないものがあったことです(IE8以前のバージョン)。

mailto_linkconsole.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 
4

2 に答える 2

1

Firefoxは、URLで128を超えるISO8859-1文字を処理できないようです。%CEログに記録された例から(Î)と%E9(é)を削除すると、問題は解消されます。残念ながら、私が考えることができる唯一の回避策は、それらのような拡張文字を同等のもの(おそらくHTMLEntities *)で手動で置き換える必要があります。Javascriptにはこれを行うためのネイティブ関数がないため、非常に煩わしいものになる可能性があります。

** HTMLEntitiesはHTMLコンテキストでのみ適切にレンダリングされ、mailto:URIはプレーンテキストのメッセージ本文を生成するため、これは不完全なソリューションです。以下はこれを行う関数ですが、メッセージにはなどのインスタンスが含まれますé。おそらく、より便利な解決策は、コメントで述べたように、アクセント付き文字を最初の128文字のASCII文字の同等の文字に変換することです。*


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;
}

これにより、ISO8859-1文字セット(ページの下部を参照)内のすべての文字が同等のHTMLEntityに変換されます。URIをエンコードする前に次を使用します。

var nom = $('#nom').val();nom = encodeURIComponent(encodeISO8859(nom));

もちろん、これは、アクセント付きの文字が理解のために絶対に必要であり、同じ基本文字(のようなA)を使用する多くのアクセントの間で重複する可能性がある場合にのみ実行してください。

于 2012-11-19T21:33:54.467 に答える
0

私はこれを試しましたが、うまくいきましたが、エラーコードはおそらくFirefoxまたはIEにインストールしたアドオンの1つに関連していると思います。ブラウザを再起動すると、役立つはずです。

これはおそらく、Googleが検索結果をリダイレクトしている間に、ページ上でいくつかの操作/変更を行っているアドオン/ユーザースクリプトが原因です。セーフモードを使用してFirefoxの問題のトラブルシューティングでfirefoxを実行し、そこでエラーが引き続き発生するかどうかを確認できます。そうでない場合は、すべてのアドオンを無効にしてから再度有効にして、どのアドオンが原因であるかを正確に特定します(各アドオンの後にブラウザを再起動する必要があります)。

もっと

于 2012-11-19T18:20:33.370 に答える