web-dev-qa-db-ja.com

ie8 var w = window.open()-「メッセージ:無効な引数」

IE8のみの問題があるサイトがあります。

コードは次のとおりです。

var w = window.open(urlstring, wname, wfeatures, 'false');

エラーは次のとおりです。

メッセージ:引数が無効です。
行:419文字:5
コード:0
URI: http://HOSTNAME/js_context.js

コードの行番号を確認しました(「行」と「URI」が正しい)。IE8の以降のバージョンではこれが正確であると理解しています。

アラートをダンプすることで、呼び出しのすべての着信パラメーターを確認しましたが、それらはすべて有効に見えます。

この問題はFFでは発生しません(おそらく3)。

更新:

問題は、「var w」を実行するときにwindow.open()の結果を割り当てることにあります。行を2つのステートメントに分割すると、IE8で機能します。

更新2:

に基づく:

http://javascript.crockford.com/code.html

関数をすぐに呼び出す場合、生成される値が関数自体ではなく関数の結果であることを明確にするために、呼び出し式全体を括弧で囲む必要があります。

これはまさにここで起こっていることではありませんが、IE8の互換モードでこの原則を適用することで問題が解決することがわかりました。

var w = (window.open(urlstring, wname, wfeatures, false));
113
benc

これは古い投稿ですが、誰かにとってはまだ役に立つかもしれません。

同じエラーメッセージが表示されました。結局、問題は2番目の引数の無効な名前でした。つまり、次のような行がありました。

   window.open('/somefile.html', 'a window title', 'width=300');

問題は有効ではないため、「ウィンドウタイトル」でした。次の行で正常に機能しました。

   window.open('/somefile.html', '', 'width=300');

実際、注意深く読むと、Microsoftは2番目の引数としてnameをサポートしていないことに気付きました。 公式ドキュメントページ を見ると、Microsoftが次の引数のみを許可していることがわかります。その引数を使用している場合:

  • _ブランク
  • _メディア
  • _親
  • _調べる
  • _自己
  • _上
251
Stefan

IEはウィンドウ名の引数について気難しいです。スペース、ダッシュ、その他の句読点は好きではありません。

78
prlafferty

IEでwindow.openを呼び出す場合、2番目の引数(ウィンドウ名)は、定義済みのtarget文字列、またはJavaScriptの有効な識別子の形式。

Firefoxで動作するもの: "Job Directory 9463460"、does Internet Exploderで動作し、たとえば "Job_Directory_9463460"(スペースなし、マイナス記号、ドットなし、it有効な識別子である必要があります)。

16
Mr. Napik

問題はwnameである可能性があるため、上記のリンクに示されているもののいずれかを使用してみてください。

オプション。ウィンドウの名前を指定する文字列。この名前は、フォームまたはアンカー要素のTARGET属性の値として使用されます。

  • _blank sURLは、名前のない新しいウィンドウにロードされます。
  • _media URLは、Microsoft Internet Explorer 6のメディアバーにロードされます。MicrosoftWindows XP Service Pack 2(SP2)以降。この機能はサポートされなくなりました。デフォルトでは、URLは新しいブラウザウィンドウまたはタブにロードされます。
  • _parent sURLは現在のフレームの親にロードされます。フレームに親がない場合、この値は値_selfとして機能します。
  • _search Windows Internet Explorer 7では無効になっています。詳細については、Internet Explorer 7のセキュリティと互換性を参照してください。それ以外の場合、Internet Explorer 5以降のブラウザーの検索ペインでsURLが開きます。
  • _self現在のドキュメントは、指定されたsURLに置き換えられます。
  • _top sURLは、ロードされる可能性のあるフレームセットを置き換えます。フレームセットが定義されていない場合、この値は値_selfとして機能します。

別のwnameを使用すると、window.openは実行されません...

8
Joaquin

実際には名前を使用できますが、スペースを含めることはできないため、window.open("../myPage","MyWindows",...)は問題なく動作するはずです( window.open )。

5
oliver

また、次のコードを使用しているときにこの問題に遭遇します。

window.open('test.html','Window title','width=1200,height=800,scrollbars=yes');

「ウィンドウタイトル」の空白スペースを削除すると、以下のコードが機能します。

window.open('test.html','Windowtitle','width=1200,height=800,scrollbars=yes');
4
Raymond

こんにちは、次のコードを使用して動作しています...

onclick="window.open('privacy_policy.php','','width=1200,height=800,scrollbars=yes');

以前私は次のように入力しました

onclick="window.open('privacy_policy.php','Window title','width=1200,height=800,scrollbars=yes');

マイクロソフトでは、window.open関数で空白にする必要があるウィンドウ名の入力を許可していません...

ありがとう、Nilesh Pangul

2
Nilesh Pangul

私にとっては、問題はウィンドウ名フィールドにダッシュ「-」がありました。ダッシュを削除しましたが、IEはエラーにならず、実際にウィンドウが開きます。

2
iohans

ここでの回答は、window.open()でタイトルを設定するときにIEがスペースをサポートしないという点で正しいです。回避策を提供するものはありません。

Window.open呼び出しからタイトルを削除し(nullまたは ''を使用できます)、開いているページに以下を追加しました:

<script>document.title = 'My new title';</script>

決して理想的ではありませんが、これにより、すべてのブラウザで必要なタイトルを設定できます。

1
MrGlass

位置4は、値として「false」を持つものを何を表しますか?それは間違ってはいけません(引用符なし?)。 IEの以前のバージョンでは、文字列がブール値に強制される可能性がありますが、新しいバージョンでは強制されません。

1
x0n

最後の引数を削除してみてください。それ以外は、URL文字列、名前、および機能が存在することを確認してください。

0
Macha

Window.openを使用して新しいウィンドウを起動する「有効な」カスタムウィンドウ名(_blankなどではない)を使用しても、まだ問題があるようです。最初にリンクをクリックすると正常に機能しますが、もう一度クリックすると(最初に起動したウィンドウがまだ開いている状態で)、「エラー:サポートされているインターフェイスはありません」スクリプトデバッグが表示されます。

0
Vince

新しいウィンドウなどの名前を使用してこのウィンドウにフォームを投稿したい場合は、IE、FF、Chromeで動作するソリューション:

  var ret = window.open("", "_blank");
  ret.name = "NewFormName";

  var myForm = document.createElement("form");
  myForm.method="post";
  myForm.action = "xyz.php";
  myForm.target = "NewFormName";

      ...
0
Belinszki Imre