2012-01-20 18 views
34

上のエラーを呼び出す方法は次のように私は自分のページ上のフラッシュビデオを持っている:不明なエラー:NPObject

<script type="text/javascript"> 
var flashvars = { 
}; 
var params = { 
    movie: "VideoMain.swf", 
    quality: "high", 
    bgcolor: "#000000", 
    allowScriptAccess: "always", 
    wmode: "transparent" 
}; 
var attributes = { 
    id: "VideoMain", 
    name: "VideoMain", 
    classid: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", 
    width: "100%", 
    height: "100%" 
}; 
swfobject.embedSWF("./video/VideoMain.swf", "myVideoContent", "100%", "100%", "11.0.0","", flashvars, params, attributes); 
</script> 

<div id="myVideoContent"> 
    <h1>Oooppsss....you need flash or a newer version of flash</h1> 
    <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p> 
</div> 

上記#VideoMain

に付加されますそれから私は、次のいます

$('#X.click').click(function(e) { 
    var flash = document.getElementById("VideoMain"); 
    flash.sendToActionScriptPublishVideo(true); 
}); 

これは、コンソールのエラーで失敗します。

Uncaught Error: Error calling method on NPObject. 
(anonymous function) 
jQuery.event.dispatchjquery.js:3256 
jQuery.event.add.elemData.handle.eventHandlejquery.js:2875 

ここで何が間違っているのでしょうか?ありがとう

答えて

73

は、ブラウザを介して公開されている「外国語」コード(外国語、JavaScriptとは異なる外国語)に対する「インターフェース」です。そうでなければ、グローバルウィンドウオブジェクトなどのブラウザ独自のオブジェクトです。埋め込まれたFlashプラグインは確かにこの "インターフェース"を実装するでしょう(ブラウザは単にそれを別のNPObjectとして見ます)。

そのオブジェクトのメソッドを呼び出すと、その呼び出しをラップして、オブジェクトに渡されたデータをシリアル化してブラウザのランタイムに戻す関数がいくつかあります。

  1. プラグインが公開されていない(または、まだ登録していない)を呼び出すしようとしている名前のメソッドを:動作しませんでしたが、いくつかの一般的な理由が含まれるであろう、まさに確実に伝えることは困難です。
  2. プラグインは、クロススクリプトが許可されていないように埋め込まれていました(制限は両側にありますが、Flashでは信頼できるドメインからの呼び出しが必要で、プラグインがオブジェクト内の設定タグ
  3. JavaScriptを介して起動プラグインのコードでスローエラー - 。。。私は同じエラーメッセージを得ていた私は、同じエラーになるか分からないが、それは非常に可能性があり
+2

第3の問題は、私にとって間違っていたことでした。もしあなたがFlashを使っているのであれば、JSによって呼び出された関数にエラーがスローされています - 'try..catch'ブロックを使ってそれを含むか、問題がある場所を絞り込んで – divillysausages

+5

JSが公開されたFlashメソッドを呼び出そうとしたときにこのエラーが発生しましたが、適切なSystem.security.allowDomain()/ System.security.allowinsecureDomain()が呼び出されませんでした。 allowDomain()を呼び出す場合は、SWF(HTTPSまたはHTTP)と同じプロトコルでHTMLが読み込まれていることを確認してください。 –

+2

4)コールバックとして追加するメソッドは、次のスコープにする必要があります:public 5)このメソッドに未定義の値を渡すと、このメッセージが作成されます(Flashの文字列が必要な場合) – YopSolo

1

問題が発生したのは、Flashがクラッシュした後に返されたExternalInterface呼び出しを行ったときだけでした(何らかの理由で)。私が実装した修正点は次のとおりです。コールバックがまだそのオブジェクトの関数である場合

関連する問題