我的页面上有一个flash视频如下:
<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>
Run Code Online (Sandbox Code Playgroud)
以上内容将附加到#VideoMain中
然后我有以下内容:
$('#X.click').click(function(e) {
var flash = document.getElementById("VideoMain");
flash.sendToActionScriptPublishVideo(true);
});
Run Code Online (Sandbox Code Playgroud)
这会因控制台错误而失败:
Uncaught Error: …Run Code Online (Sandbox Code Playgroud) 编辑我现在更改了一些Javascript,所以如果我能找到一个检测HTML5视频支持的javascript函数,它应该可以工作.
我有一个HTML5视频播放器,闪存后备,如果不支持HTML5,我希望它回退到闪存.我目前正在使用
<!--[if !IE]><!--> then load my custom player
else use SWFObject to render it.
是否有可能做到以下几点:
` If (HTML5 supported browser) {
<some html and script> (My custom player)
}else{
<different html and script> (I would call SWFobject here)
}
`
Run Code Online (Sandbox Code Playgroud)
试图找到一个很好的简单解决方案的想法.
通常我可以<object>在视频标签中添加一个额外的,但由于播放器插入页面的方式,这是不可能的.
即使我可以使用可能不可靠的方法检测HTML5支持,但我不确定如何根据支持的输出获取HTML
其实我希望我知道从哪里开始......
我在我的个人网站上嵌入了第三方SWF图像库控件.
SWF是XML驱动的.我动态加载XML文件如下....
var flashvars = { xmlPath: "http://www.example.com/xml.aspx" };
var params = { allowFullScreen: "true", wmode: "transparent", allowScriptAccess: "always"};
var attributes = {};
swfobject.embedSWF("main.swf", "gallery", "100%", "100%", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
Run Code Online (Sandbox Code Playgroud)
问题是页面没有按预期工作.实际上它只适用于Firefox,而不适用于Chrome或IE
用fiddler检查请求后,我发现找不到文件crossdomain.xml.所以,stackoverflow帮助我找到了一个样本......
<?xml version="1.0" ?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*"/>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
Run Code Online (Sandbox Code Playgroud)
添加crossdomain.xml后,网页现在可以在Firefox和IE浏览器中使用在Chrome中我仍然有问题.
所以这里有几个问题......
1)什么是crossdomain.xml?
2)如何让我的网页也能在Chrome中运行?
根据我的阅读,我应该如何设置YouTube API:
<!DOCTYPE html>
<html lang="en">
<head>
<meta content='text/html;charset=UTF-8' http-equiv='content-type' />
<title>Youtube Player</title>
<script src="jquery.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8">
function onYouTubePlayerReady(id) {
console.log("onYouTubePlayerReady() Fired!");
var player = $("#youtube_player").get(0);
}
var params = { allowScriptAccess: "always" };
var atts = { id: "youtube_player" };
swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1",
"youtube", "425", "356", "8", null, null, params, atts);
</script>
</head>
<body>
<div id="youtube"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但是,'onYouTubePlayerReady()'根本不会触发,如果我手动获取对播放器的引用,则很多方法都是未定义的; 例如,cueVideoById()可以工作,但playVideo()不能.
我该如何解决这个问题?
我已下载SWFObject,并将其包含在我的网站中.现在,我想简单地根据用户浏览器访问我的网站时是否安装Flash 来获取true或false值.
我怎样才能做到这一点?
像大多数人一样,我使用SWFObject将Flash(swf)文件嵌入到我的Web项目中.
如您所知,SWFObject提供了两种嵌入Flash的方法:静态发布和动态发布.
静态发布使用常规标记将文件嵌入到文档中,并且还使用仅使用常规标记无法进行的JavaScript检查.这很好,好像你有无法打开JavaScript的客户(搜索引擎,一些便携式设备......),文件仍会显示(如果他们安装了正确的Flash插件).但是如果你有遗留/未修补的Internet Explorer上的人(2006年4月到2008年4月),他们将有可怕的"点击激活"与Flash进行交互.
动态发布使用JavaScript嵌入Flash.这将摆脱旧IE上的"点击激活"功能,但如果JavaScript关闭,Flash将根本不存在.
这两种方法都有其优点和不便之处.在一个乌托邦世界中,我们都会使用动态发布方法,但是我们(或者至少我们中的一些人)喜欢使用IE 6的旧系统(他们想要升级,但他们不能因为非常糟糕)设计软件,升级费用为10K + $).我需要支持旧版IE,并希望摆脱"点击激活"功能,同时支持关闭JavaScript的人.
那么结合静态和动态发布方法呢?怎么样的:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>SWFObject 2 static+dynamic publishing example page</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
swfobject.embedSWF("test.swf", "myContent", "300", "120", "9.0.0", "expressInstall.swf");
</script>
</head>
<body>
<div id="myContent">
<object id="myId" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="300" height="120">
<param name="movie" value="test.swf" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="test.swf" width="300" height="120">
<!--<![endif]-->
<div>
<h1>Alternative content</h1>
<p><a href="http://www.adobe.com/go/getflashplayer"><img …Run Code Online (Sandbox Code Playgroud) 我需要将wmode任意flash对象从外部js文件更改为透明,以确保它们不使用Jquery或类似的lib来隐藏菜单.
在FF我使用getElementsByTagName("embed")和设置属性.它似乎运作良好.
具体来说我在IE7 中遇到了object由swfObject库设置的问题.
swfObject 在iE7中创建以下代码:
<OBJECT id=mymovie height=400 width=134 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000>
<PARAM NAME="_cx" VALUE="3545">
<PARAM NAME="_cy" VALUE="10583">
<PARAM NAME="FlashVars" VALUE="">
<PARAM NAME="Movie" VALUE="imgs/site/tower.swf">
<PARAM NAME="Src" VALUE="imgs/site/tower.swf">
<PARAM NAME="WMode" VALUE="Window">
<PARAM NAME="Play" VALUE="0">
<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="">
<PARAM NAME="Scale" VALUE="ShowAll">
<PARAM NAME="DeviceFont" VALUE="0">
<PARAM NAME="EmbedMovie" VALUE="0">
<PARAM NAME="BGColor" VALUE="FFFFFF">
<PARAM NAME="SWRemote" VALUE="">
<PARAM NAME="MovieData" VALUE="">
<PARAM NAME="SeamlessTabbing" VALUE="1">
<PARAM …Run Code Online (Sandbox Code Playgroud) 我正在开发一款Flash游戏,需要在页面上调用一些Javascript并从中获取数据.从Flash调用Javascript工作.从Javascript(通常)调用Flash函数不会.
我正在使用Gaia框架.
怎么了:
ExternalInterface.call()调用Javascript函数.这有效.ExternalInterface.addCallback().TypeError: myFlash.testCallback is not a function.addCallback().Gaia及其中包含的一些库使用addCallback(),从Javascript调用这些函数也会产生TypeError.addCallback()定期重试并不能解决错误ExternalInterface.available = true并ExternalInterface.objectID包含Flash嵌入对象的正确名称.document.getElementById('myflashcontent')正确返回Flash嵌入对象.编辑添加:
ExternalInterface.addCallback()被包裹在一个try...catch街区.发生JS错误时,不会触发该catch块.这是一场无声的失败.allowScriptAccess = always.flash.system.Security.allowDomain("mydomain")不能解决错误.从我的Page类:
public class MyPage extends AbstractPage
{
// declarations of stage instances and class variables …Run Code Online (Sandbox Code Playgroud) 如何使用jquery或javascript检查是否在Chrome中阻止了Flash插件?
我们可以使用下面的方法检查已禁用的Flash插件
((typeof navigator.plugins != "undefined" && typeof navigator.plugins["Shockwave Flash"] == "object") || (window.ActiveXObject && (new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) != false));
Run Code Online (Sandbox Code Playgroud)
在Chrome中,您可以通过单击禁用个别插件来单独禁用插件.然后,如果我们单独禁用插件,则上面的查询工作并返回false.但是,如果我们阻止所有插件,它将仅返回true.我关心的是如何检测插件已被阻止.
我一直在我的一个项目中使用swfobject来检测最终用户是否安装了Flash版本.问题出在Firefox上,因为它显示消息:"允许运行Adobe Flash?" 这是我想避免的.
这不是向最终用户显示替代内容,我想要的只是尝试检测Flash,如果没有安装闪存,则不显示任何内容,但如果安装了闪存,则不显示允许运行. ..在Firefox中的消息.
有谁知道用SwfObject防止这种情况发生的任何方法?
注意:只需在html标题中包含下一行:
<script type="text/javascript" src="swfobject.js"></script>
Run Code Online (Sandbox Code Playgroud)
它会触发允许运行消息:S
如果你认为有一个更好的替代swfobject来解决这个问题,它是一个很好的多用途swf处理工具,我很满意.
以下是该消息的示例:

谢谢
swfobject ×10
javascript ×8
flash ×7
jquery ×3
adobe ×1
asp.net ×1
browser ×1
cross-domain ×1
firefox ×1
html5 ×1
object ×1
wmode ×1
youtube-api ×1