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


113

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で機能します。

UPDATE2:

に基づく:

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

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

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

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

私にも同じ問題があり、Davidの投稿が最良の答えです。あなたの投稿とDavidの助けをありがとう。
Ervin

回答:


251

これは古い投稿ですが、おそらく誰かにとってはまだ便利です。

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

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

無効なため、問題は「ウィンドウタイトル」でした。次の行で問題なく動作しました。

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

実際、よく読んで、私はマイクロソフトがname2番目の引数としてをサポートしていないことに気づきました。あなたが見てみると、公式ドキュメントページは、すべてでその引数を使用している場合、マイクロソフトが唯一、次の引数を許可することを参照してください。

  • _ブランク
  • _メディア
  • _親
  • _探す
  • _自己
  • _上

1
私(質問者)はIE8のみの破損に集中していたため、この機能のMozillaの説明を確認するのを怠っていたと思います。
2010

2
簡単に言うと、developer.mozilla.org / en / DOM / window.open-> "strWindowNameは新しいウィンドウのタイトルを指定しません。"
2010

33
私のウィンドウ名に「my-windowname」などの名前にダッシュ「-」が含まれていると、IEでもこのエラーが発生しました。
Matt Palmerlee、2011

1
リンクしたMSDNドキュメントページには、「オプション。ウィンドウの名前を指定する文字列。」と記載されています。これは、上記の引数以外のキーワードを使用できるように思えます。
James McMahon

3
IE8ではImageDisplay1234のような名前で動作しますが、Image-Display-1234では動作しません
ボートコーダー

78

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


3
またはドットまたはダッシュまたはその他の句読点
ボートコーダー

これは役に立ちます。本当にIE 6-10が嫌いです
Dilip Godhani

16

window.openIEで呼び出す場合、2番目の引数(ウィンドウ名)は、事前定義されたターゲット文字列のいずれか、またはJavaScriptで有効な識別子の形式の文字列である必要があります。

したがって、Firefoxで機能するもの: "Job Directory 9463460" はInternet Exploder では機能せず、次のように置き換える必要があります: "Job_Directory_9463460"(スペースなし、マイナス記号なし、ドットなし、有効な識別子である必要があります) 。


おかげで..これは私を助けてくれました..ウィンドウ名にダッシュ(-)が含まれていました
delux247

8

問題はwnameかもしれません、上のリンクに示されているものの1つを使ってみてください、私は引用します:

オプション。ウィンドウの名前を指定する文字列。この名前は、フォームまたはアンカー要素の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のセキュリティと互換性を参照してください。それ以外の場合、sURLはInternet Explorer 5以降のブラウザーの検索ペインで開かれます。
  • _self現在のドキュメントは、指定されたsURLに置き換えられます。
  • _top sURLは、ロードされる可能性のあるフレームセットを置き換えます。フレームセットが定義されていない場合、この値は値_selfとして機能します。

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


5
その最後のステートメントは正しくありません。また、(a)既存のフレームの名前を指定してそのフレームにページをロードする、(b)既存の「名前付きウィンドウ」の名前を指定してそこにページをロードする、または(c)存在しない名前を指定することもできます「名前付きウィンドウ」を作成するために存在します。
ベンブランク

window.openの結果を変数に設定しなかった以外は、同じ問題がありました。wname変数にページタイトルがありました。'_blank'に変更し、問題を修正しました。
Derek White、

私がそれを絞り込んだのは、含まれていませんでした-または。句読点Image-Display-1234-> ImageDisplay1234を取り除くと、すべて順調でした。
ボートコーダー2012

1
ベンの主張をサポートするために、これはMSDNがwindow.openの2番目のパラメータについて述べているものです。「ウィンドウの名前を指定する文字列。この名前は、フォームまたはアンカー要素のTARGET属性の値として使用されます。」そして、これがTARGET属性のドキュメントです:msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx。targetは、この回答にリストされている値だけでなく、任意の文字列にできることを明確に述べています。
ナイアヘル2012

5

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


4

次のコードを使用しているときにもこの問題が発生します。

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

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

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

これはとても役に立ちました。スペースを_に置き換えてしまいました。バカIE!
MrGlass 2013年

2

こんにちは、次のコードを使用してその機能...

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');

手段Microsoftは空白にする必要がありますが、ウィンドウ名を入力することはできません。window.open機能...

ありがとう、Nilesh Pangul


これは正しくありません。空白にすることもできますが、空白にする必要はありません。
ジミーボス14

2

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


1

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


引用を削除しましたが、IE8の問題の原因ではありませんでした。
2009

1

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

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

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

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


0

最後の引数を削除してみてください。それ以外に、urlstring、wname、およびwfeaturesが存在することを確認してください。


0

私は同じ問題を発見し、最初の回答を読んだ後、問題はウィンドウ名が原因であると想定し、最初に「_blank」に変更しました。値のスペース:)-も機能しました。IMO、問題(またはその一部)は、IEが通常の文字列値をwnameとして使用できないことが原因です。これが誰かが同じ問題に遭遇した場合に役立つことを願っています。


0

新しいウィンドウの名前などを使用してフォームをこのウィンドウに投稿する場合、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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.