如何使用javascript暂停/播放/查找silverlight视频

如何使用javascript暂停/播放/查找silverlight视频,javascript,silverlight,video,Javascript,Silverlight,Video,一点背景。我希望能够通过javascript编程控制Amazon即时视频上的Silverlight视频播放器 使用开发者控制台。我在DOM中找到了视频播放器元素 <div id="player_container" style="display: block;"> <object type="application/x-silverlight" data="data:application/x-silverlight," id="

一点背景。我希望能够通过javascript编程控制Amazon即时视频上的Silverlight视频播放器

使用开发者控制台。我在DOM中找到了视频播放器元素

<div id="player_container" style="display: block;">
  <object type="application/x-silverlight" 
          data="data:application/x-silverlight," 
          id="player_object" 
          width="50%" 
          height="100%">
    <param name="color" value="#ffffff">
    <param name="background" value="#000000">
    <param name="minRuntimeVersion" value="5.1">
    <param name="autoUpgrade" value="false">
    ... elided several <param>'s here ...
  </object>
</div>
然后,我正试图遵循这一原则。这说明我应该

 > silver.content.findName(SOMETHING_HERE);
我不确定在这里使用什么,所以我下载了silverlight应用程序

wget http://www.amazon.com/gp/video/streaming/silverlightPlayer.xap?ie=UTF8&version=104.0-0
unzip silverlightPlayer.xap?ie=UTF8
然后查看解压缩后的AppManifest.xaml:

<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ExternalCallersFromCrossDomain="ScriptableOnly" EntryPointAssembly="Amazon.ATVSilverlightPlayer" EntryPointType="Amazon.ATVSilverlightWebPlayer.App" RuntimeVersion="5.0.61118.0">
  <Deployment.Parts>
    <AssemblyPart x:Name="Amazon.ATVSilverlightPlayer" Source="Amazon.ATVSilverlightPlayer.dll" />
    <AssemblyPart x:Name="Amazon.AIV.Utilities" Source="Amazon.AIV.Utilities.dll" />
    <AssemblyPart x:Name="Amazon.Common" Source="Amazon.Common.dll" />
    <AssemblyPart x:Name="AmazonPlayer.Themes.DarkGray" Source="AmazonPlayer.Themes.DarkGray.dll" />
    <AssemblyPart x:Name="AtvAdsManager" Source="AtvAdsManager.dll" />
    <AssemblyPart x:Name="ATVQos" Source="ATVQos.dll" />
    <AssemblyPart x:Name="Microsoft.Logging.LocalConnection" Source="Microsoft.Logging.LocalConnection.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Core" Source="Microsoft.SilverlightMediaFramework.Core.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Diagnostics" Source="Microsoft.SilverlightMediaFramework.Diagnostics.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Logging" Source="Microsoft.SilverlightMediaFramework.Logging.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Plugins" Source="Microsoft.SilverlightMediaFramework.Plugins.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Plugins.Monitoring" Source="Microsoft.SilverlightMediaFramework.Plugins.Monitoring.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Plugins.Progressive" Source="Microsoft.SilverlightMediaFramework.Plugins.Progressive.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Plugins.SmoothStreaming" Source="Microsoft.SilverlightMediaFramework.Plugins.SmoothStreaming.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Plugins.TimedText" Source="Microsoft.SilverlightMediaFramework.Plugins.TimedText.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Utilities" Source="Microsoft.SilverlightMediaFramework.Utilities.dll" />
    <AssemblyPart x:Name="Microsoft.Web.Media.SmoothStreaming" Source="Microsoft.Web.Media.SmoothStreaming.dll" />
    <AssemblyPart x:Name="Newtonsoft.Json" Source="Newtonsoft.Json.dll" />
    <AssemblyPart x:Name="System.Json" Source="System.Json.dll" />
    <AssemblyPart x:Name="System.Xml.Linq" Source="System.Xml.Linq.dll" />
    <AssemblyPart x:Name="System.ComponentModel.Composition" Source="System.ComponentModel.Composition.dll" />
    <AssemblyPart x:Name="System.Xml.Serialization" Source="System.Xml.Serialization.dll" />
    <AssemblyPart x:Name="System.ComponentModel.Composition.Initialization" Source="System.ComponentModel.Composition.Initialization.dll" />
    <AssemblyPart Source="de/Amazon.ATVSilverlightPlayer.resources.dll" />
    <AssemblyPart Source="en-GB/Amazon.ATVSilverlightPlayer.resources.dll" />
    <AssemblyPart Source="ja/Amazon.ATVSilverlightPlayer.resources.dll" />
    <AssemblyPart Source="de/System.Json.resources.dll" />
    <AssemblyPart Source="ja/System.Json.resources.dll" />
    <AssemblyPart Source="de/System.Xml.Linq.resources.dll" />
    <AssemblyPart Source="ja/System.Xml.Linq.resources.dll" />
    <AssemblyPart Source="de/System.ComponentModel.Composition.resources.dll" />
    <AssemblyPart Source="ja/System.ComponentModel.Composition.resources.dll" />
    <AssemblyPart Source="de/System.Xml.Serialization.resources.dll" />
    <AssemblyPart Source="ja/System.Xml.Serialization.resources.dll" />
    <AssemblyPart Source="de/System.ComponentModel.Composition.Initialization.resources.dll" />
    <AssemblyPart Source="ja/System.ComponentModel.Composition.Initialization.resources.dll" />
  </Deployment.Parts>
</Deployment>


在使用
silver.content.findName(此处的某物)
时,我尝试用.xaml文件中的许多
x:Name
值替换此处的
SOMETHING\u
。始终返回null。我想获得一个句柄,让我从自己的javascript控制台播放/暂停/搜索亚马逊即时视频?如何处理?

应用程序清单不是实际的Silverlight应用程序,它定义了xap文件中组成Silverlight应用程序的程序集。您尝试访问的Silverlight MediaElement在xaml文件中定义,该文件包含在应用程序清单中列出的dll之一中,Amazon.ATVSilverlightPlayer.dll是我开始查找的地方。我喜欢用.NET Reflector检查DLL

按名称引用MediaElement是一种脆弱的方法,因为为Silverlight元素指定一个x:name属性是可选的,Amazon可以随时更改它。您可以通过以下方法遍历Silverlight应用程序可视树并查找MediaElement类型的对象:

我不得不稍微改变一下,让它为我工作:

    var hasLoaded = false;

    function onSilverlightLoad(sender) {
        if (hasLoaded) {
            return;
        }
        forEachDescendant(document.getElementById('silverlightObject').content.Root);
        hasLoaded = true;
    }

    function forEachDescendant(elem) {
        if (elem != null) {
            console.log('Type: ' + elem.toString());
            if (typeof elem.children == 'object') {
                for (var i = 0; i < elem.children.count; i++) {
                    var child = elem.children.getItem(i);
                    forEachDescendant(child);
                }
            }
            else if (typeof elem.content == 'object') {
                forEachDescendant(elem.content);
            }
        }
    }
var hasload=false;
silverlightload(发送器)上的函数{
如果(已加载){
返回;
}
ForEach子孙(document.getElementById('silverlightObject').content.Root);
hasload=true;
}
函数前传子体(elem){
if(elem!=null){
log('Type:'+elem.toString());
if(元素的类型子项=='object'){
for(变量i=0;i
我还引用了此资源。
    var hasLoaded = false;

    function onSilverlightLoad(sender) {
        if (hasLoaded) {
            return;
        }
        forEachDescendant(document.getElementById('silverlightObject').content.Root);
        hasLoaded = true;
    }

    function forEachDescendant(elem) {
        if (elem != null) {
            console.log('Type: ' + elem.toString());
            if (typeof elem.children == 'object') {
                for (var i = 0; i < elem.children.count; i++) {
                    var child = elem.children.getItem(i);
                    forEachDescendant(child);
                }
            }
            else if (typeof elem.content == 'object') {
                forEachDescendant(elem.content);
            }
        }
    }