2017-10-13 11 views
0

HTMLページからフォームを作成、追加、送信するシンプルな機能があり、Safari以外のすべてのブラウザで動作します。任意のヒントがSafariでJavascript form.submit()が機能しない

非常に歓迎されるだろう、なぜ、私はここに私の関数があります把握することはできません。

function open(method, url, data, target) { 
     var form = document.createElement("form"); 
     form.action = url; 
     form.method = method; 
     form.target = target; 
     if (data) { 
      for (var i = 0; i < data.length; i++) { 
       let input = document.createElement("textarea"); 
       input.name = i.toString(); 
       input.innerText = data[i]; 
       form.appendChild(input); 
      } 
     } 
     form.style.display = "none"; 
     document.body.appendChild(form); 
     form.submit(); 
     form.remove(); 
    } 

    // use example 
    var data = ["text1", "text2", "text3", "text4", "text5", "text6"]; 
    open("POST", "../result.php" , data, "_blank"); 

シモンズ:それは私はjQueryの

+1

iframeを使用していますか?私はiframeに問題があることを思い出します。 – ViRuSTriNiTy

+0

あなたが 'form.remove();'を実行しない、またはしない場合は動作しますか? – mplungjan

+0

@ViRuSTriNiTypいいえ、iframeはありません – Plastic

答えて

3

を使用して回避することが可能です場合はtarget="_blank"を設定しているとトリガされますがスクリプトの読み込み中の機能(つまり、クリックのようなユーザイベントからではありません)。

ページが読み込まれたときに自動ポップアップを開くと、Safariによってブロックされています。

_blankを使用しないでください。関数を呼び出す前に何かがクリックされるまで待ってください。

+0

"_blank"を使用しないと動作しますが、結果は同じページに読み込まれます。現在のページを保持し、新しいウィンドウ/タブで結果を開く必要がある場合? – Plastic

+0

それからボタンがクリックされるのを待ちます。ポップアップは、時代遅れのときには不愉快で、ページロード時にはひどいだけで、ブラウザは作成者が作成しないようにするための措置を講じる。 – Quentin

+0

また、ajaxを使用するか、iframeをターゲットに設定します(ただし、サファリに惑わされない限り) – mplungjan

関連する問題