23

ウィンドウがあり、閉じる前に下にあるページを更新します。

if(opener && typeof(opener.Refresh) != 'undefined')
{
    opener.Refresh();
}

元のオープニングページから移動すると、このコードは「PermissionDenied」エラーをスローします。

コードをデバッグすると、予想される「undefined」ではなく「unknown」typeof(opener.Refresh)に等しいことがわかりました。

「不明」はの戻り値の1つではないことを私が知っている限り、この値はどのように、そしてなぜ返されるのでしょうかtypeof

さらに詳しい情報

チェックを次のように変更することで、エラーを回避しました。

if(opener && typeof(opener.Refresh) == 'function')

ただし、このような例(javascriptでのundefined-object-property-in-javascriptの検出)は、方程式に「不明」を考慮していないようです。

4

3 に答える 3

20

Bytesでの重複した質問によると、typeof値unknownは。とともにJScriptバージョン8に追加されますdate

Robert Nymanによるブログへのコメントも、説明になります。

問題のオブジェクトがCOM+ブリッジの反対側にある場合、InternetExplorerは「不明」と表示します。あなたはこれを知らないか、これを理解していないかもしれませんが、MSのXMLHTTPオブジェクトはIUnknownを実装する別のCOM+オブジェクトの一部です。メソッドを呼び出すときは、ネイティブJavaScriptを呼び出すのではなく、COMブリッジを介して呼び出します。

基本的に、JScriptエンジンの真の部分ではないものをテストまたはアクセスしようとした場合、それがMSの答えです。

于 2012-06-11T15:17:28.553 に答える
6

inオペレーターを試してください。私は(アプレットで)同じ問題を抱えていました、そして私はそれを使ってそれを解決しましたin

if("Refresh" in opener) {
    opener.Refresh();
}
于 2013-03-01T07:26:10.223 に答える
5

ECMAScript仕様では、ホストオブジェクトの場合、typeof演算子の戻り値は次のようになっています。

undefined「 」、「boolean」、「number」、または「 」以外の実装定義string

unknown値はInternetExplorerでのみ返されると思います。興味深いことに、MSDNはそれについて言及していません。

typeofが返す可能性のある値は、「number」、「string」、「boolean」、「object」、「function」、および「undefined」の6つです。

于 2012-06-11T15:10:47.990 に答える