0

ばかげた初心者の質問はご容赦ください。私はJavascriptをプログラミングしてから約24時間しか経っていません...:)

私は(外部の助けを借りて)shockwaveフラッシュオブジェクトを自分のページに埋め込むことができました-具体的にはMultiPowUpload2.1です。ページにうまく表示され、正しく機能しているようです。その部分を既読として取ることができます。

今、私はJavaScriptでもっと高度なことをしようとしています-ボタンがあり、onClick()コードには次のものがあります:

var swf = document.getElementById("FlashFilesUpload1");
var itemsCount = swf.filesCount;
alert("items: "+itemsCount);

しかし、アラートステートメントは「アイテム:未定義」と言っています。itemsCountに設定した場合も同じですswf.nonExistentProperty-すべてが「未定義」です。しかし、私がドキュメントで読んだことから、確かにfilesCountプロパティがあります。toString()このswfオブジェクトの他のすべてのプロパティとメソッドにアクセスしようとしましたが、「HTMLObjectElement」を返すを除いて、どれも機能しません。

私は明らかにこのオブジェクトに間違って対処しています-しかし、私は何を間違っているのですか?


明確化

@brianpeirisへの返信:私はあなたが提案したリンクのページとはまったく異なる方法でこれを行っています。私は素晴らしい知識を持ってこれをしませんでした、私は本当に猿のように振る舞い、機能する他の人のコードをコピーしようとし、それからそれを微調整して私が望むことをします...だから私が何かを知っていると思い込まないでください、しかし明らかです-覚えておいてください、私はJavaScriptを約1日しかやっていないのです!

したがって、コントロール自体のコードは次のとおりです。

          <object id="FlashFilesUpload1" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
          classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" viewastext>
          <!-- Replace symbols " with the &quot; at all parameters values and 
    symbols "&" with the "%26" at URL values or &amp; at other values!
    The same parameters values should be set for EMBED object below. -->
          <param name="FlashVars" value="uploadButtonVisible=false&uploadUrl=../ReceiveBulkCases.aspx" />
          <param name="BGColor" value="#F8F6E6" />
          <param name="Movie" value="ClientSideControls/ElementITMultiPowUpload2.1.swf" />
          <param name="Src" value="ClientSideControls/ElementITMultiPowUpload2.1.swf" />
          <param name="WMode" value="Window" />
          <param name="Play" value="-1" />
          <param name="Loop" value="-1" />
          <param name="Quality" value="High" />
          <param name="SAlign" value="" />
          <param name="Menu" value="-1" />
          <param name="Base" value="" />
          <param name="AllowScriptAccess" value="always" />
          <param name="Scale" value="ShowAll" />
          <param name="DeviceFont" value="0" />
          <param name="EmbedMovie" value="0" />
          <param name="SWRemote" value="" />
          <param name="MovieData" value="" />
          <param name="SeamlessTabbing" value="1" />
          <param name="Profile" value="0" />
          <param name="ProfileAddress" value="" />
          <param name="ProfilePort" value="0" />
          <!-- Embed for Netscape,Mozilla/FireFox browsers support. Flashvars parameters are the same.-->
          <!-- Replace symbols " with the &quot; at all parameters values and symbols "&" with the "%26" at URL values or &amp; at other values! -->
          <embed bgcolor="#F8F6E6" id="EmbedFlashFilesUpload" src="ClientSideControls/ElementITMultiPowUpload2.1.swf"
            quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
            type="application/x-shockwave-flash" width="450" height="350" flashvars="uploadButtonVisible=false&uploadUrl=../ReceiveBulkCases.aspx">
</embed>
        </object>

ご覧のとおり、HTMLに埋め込まれているのobjectは、指定した参照とは異なり、スクリプトを使用して他のトリックを実行してページに表示します。

ところで、私が彼らのやり方でそれを試したとき(それほど難しくはありません、私はあなたに許可します)、私は自分のページに表示されることさえコントロールを得ることができませんでした!

あなたの助けをありがとう...大いに感謝します

4

1 に答える 1

2

編集:やっと理解できたと思います!を に設定しただけuseExternalInterfacesですYes

したがって、コードで変更します

<param 
  name="FlashVars"
  value="uploadButtonVisible=false&uploadUrl=../ReceiveBulkCases.aspx" />

<param 
  name="FlashVars"
  value="uploadButtonVisible=false&uploadUrl=../ReceiveBulkCases.aspx&useExternalInterface=Yes" />

<embed>タグについても同じことを行います。

デモ サイトにアクセスして Firebug で次のコードを実行する0と、ファイルを選択する前に返され、ファイルを選択した後に正しいカウントが返されます。useExternalInterfaceまた、ソースを確認すると、オプションがに設定されていることがわかりますYes

alert(document.getElementById('MultiPowUpload').filesCount());

PS MultiPowUpload に含まれている SWFObject スクリプトの使用を検討する必要があります。ブラウザ間の問題を心配することなく変数を簡単に設定および変更できます。また、Flash を使用していないユーザーに対しても適切に機能を低下させます。


さらに編集 コメントに答えるには:はい、filesCount自分のマシンで作業しています。

言い忘れたことの 1 つはfilesCount、フラッシュ コントロールが完全に読み込まれる前に取得しようとしている可能性があることです。

以下は私が使用しているコードです。あなたのコードを正確にコピーし、useExternalInterface設定と独自の JavaScript を追加しました。

私の JavaScript コードはfilesCount、関数を使用して 500 ミリ秒ごとに繰り返しチェックすることに注意してくださいsetInterval

<object id="FlashFilesUpload1" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
  classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" viewastext>
  <!-- Replace symbols " with the &quot; at all parameters values and
  symbols "&" with the "%26" at URL values or &amp; at other values!
  The same parameters values should be set for EMBED object below. -->
  <param name="FlashVars" value="uploadButtonVisible=false&uploadUrl=../ReceiveBulkCases.aspx&useExternalInterface=Yes" />
  <param name="BGColor" value="#F8F6E6" />
  <param name="Movie" value="ClientSideControls/ElementITMultiPowUpload2.1.swf" />
  <param name="Src" value="ClientSideControls/ElementITMultiPowUpload2.1.swf" />
  <param name="WMode" value="Window" />
  <param name="Play" value="-1" />
  <param name="Loop" value="-1" />
  <param name="Quality" value="High" />
  <param name="SAlign" value="" />
  <param name="Menu" value="-1" />
  <param name="Base" value="" />
  <param name="AllowScriptAccess" value="always" />
  <param name="Scale" value="ShowAll" />
  <param name="DeviceFont" value="0" />
  <param name="EmbedMovie" value="0" />
  <param name="SWRemote" value="" />
  <param name="MovieData" value="" />
  <param name="SeamlessTabbing" value="1" />
  <param name="Profile" value="0" />
  <param name="ProfileAddress" value="" />
  <param name="ProfilePort" value="0" />
  <!-- Embed for Netscape,Mozilla/FireFox browsers support. Flashvars parameters are the same.-->
  <!-- Replace symbols " with the &quot; at all parameters values and symbols "&" with the "%26" at URL values or &amp; at other values! -->
  <embed bgcolor="#F8F6E6" id="EmbedFlashFilesUpload" src="ClientSideControls/ElementITMultiPowUpload2.1.swf"
    quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
    type="application/x-shockwave-flash" width="450" height="350" flashvars="uploadButtonVisible=false&uploadUrl=../ReceiveBulkCases.aspx&useExternalInterface=Yes">
  </embed>
</object>


<script>
  function updateMessage() {
    var message = (new Date()).toLocaleTimeString() + ': ';

    try {
      var objectElement = document.getElementsByTagName('object')[0];
      var embedElement = document.getElementsByTagName('embed')[0];

      if (objectElement.filesCount) {
        message += 'We are in IE ' + objectElement.filesCount();
      }
      else if (embedElement.filesCount) {
        message += 'We are in Firefox ' + embedElement.filesCount();
      }
      else {
        message += "The flash object is not loaded or useExternalInterface is not set to 'Yes'";
      }
    }
    catch (exp) {
      message += 'An error occurred';
    }
    document.getElementById('message').innerHTML = message;
  }

  // Update the message every 500 milliseconds
  setInterval(updateMessage, 500);
</script>
于 2009-05-08T08:14:41.143 に答える