在 302 重定向或 embed/object/iframe 标记内的元素(跨域)后获取 flash src
Getting flash src after a 302 redirect OR an element inside an embed/object/iframe tag (cross-domain)
URL 示例。com/redir 会自动将用户 (HTTP 302) 重定向到 example.com/hi.SWF? message=消息+值。
在下面的示例中,如何使用 javascript 或 flash 获取消息值?
<!DOCTYPE html>
<html>
<body>
<embed id="foo" src="https://example.com/redir"></embed>
<!-- Remember that example.com/redir will be automatically redirected to example.com/hi.SWF?message=Message+Value -->
<!-- The code to get the message value must go here -->
</body>
</html>
考虑一下:
- 上面的 .html 托管在 cross-domain.com 中,就像涉及的任何其他文件一样在解决方案中 (.swf, .js, .html, .css, 等等);
- 您无法控制 example.com;
- 您无法控制 hi.SWF;
- 您可以将 标签更改为 或
;
我认为获取重定向 swf 及其参数的 url 的最简单方法是使用另一个 swf 作为当前 swf 的加载器,您可以在其中获取 url并将参数传递给重定向的 swf,然后您可以通过 ExternalInterface
.
将其发送到 JavaScript
为此,请看一下这个例子:
动作脚本:
// url : the url of the current swf
// this url is passed by flash vars in the html page
// default value : http://www.example.com/redirect
var swf_url:String = this.loaderInfo.parameters.url || 'http://www.example.com/redirect',
// fn : the name of the js function which will get the url and the message param
// this name is passed by flash vars in the html page
// default value : console.log
js_function:String = this.loaderInfo.parameters.fn || 'console.log',
message:String = 'no message';
var url_request:URLRequest = new URLRequest(swf_url);
var swf_loader:Loader = new Loader();
swf_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, on_content_load);
swf_loader.load(url_request);
function on_content_load(e:Event): void
{
var loader_info:LoaderInfo = LoaderInfo(e.currentTarget);
// get the message param or use the default message
message = loader_info.parameters.message || message;
// if ExternalInterface is available, send data to js
if(ExternalInterface.available)
{
// send the swf url and the message param to the js function
ExternalInterface.call(js_function, { url: loader_info.url, message: message });
}
// show the redirected loaded swf
addChild(swf_loader);
}
HTML 边 :
对于这个例子,假设我们有一个这样的 .htaccess
文件:
.htaccess :
Redirect /redirect /new.swf?message=a%20message%20here
JavaScript :
function get_data_from_flash(data)
{
console.log('url : ' + data.url);
// gives :
// url : http://www.example.com/new.swf?message=a%20message%20here
console.log('message : ' + data.message);
// gives :
// message : a message here
}
HTML :
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400">
<param name="movie" value="loader.swf" />
<param name="flashvars" value="url=http://www.example.com/redirect&fn=get_data_from_flash" />
<object type="application/x-shockwave-flash" data="loader.swf" width="550" height="400">
<param name="flashvars" value="url=http://www.example.com/redirect&fn=get_data_from_flash" />
</object>
</object>
就这些!
如果想了解更多ExternalInterface
的使用方法,可以看看here.
希望能帮到你。
简单回答:
由于同源策略,你不能那样做。
您的请求中不会携带用户的cookies。
URL 示例。com/redir 会自动将用户 (HTTP 302) 重定向到 example.com/hi.SWF? message=消息+值。
在下面的示例中,如何使用 javascript 或 flash 获取消息值?
<!DOCTYPE html>
<html>
<body>
<embed id="foo" src="https://example.com/redir"></embed>
<!-- Remember that example.com/redir will be automatically redirected to example.com/hi.SWF?message=Message+Value -->
<!-- The code to get the message value must go here -->
</body>
</html>
考虑一下:
- 上面的 .html 托管在 cross-domain.com 中,就像涉及的任何其他文件一样在解决方案中 (.swf, .js, .html, .css, 等等);
- 您无法控制 example.com;
- 您无法控制 hi.SWF;
- 您可以将 标签更改为 或 ;
我认为获取重定向 swf 及其参数的 url 的最简单方法是使用另一个 swf 作为当前 swf 的加载器,您可以在其中获取 url并将参数传递给重定向的 swf,然后您可以通过 ExternalInterface
.
为此,请看一下这个例子:
动作脚本:
// url : the url of the current swf
// this url is passed by flash vars in the html page
// default value : http://www.example.com/redirect
var swf_url:String = this.loaderInfo.parameters.url || 'http://www.example.com/redirect',
// fn : the name of the js function which will get the url and the message param
// this name is passed by flash vars in the html page
// default value : console.log
js_function:String = this.loaderInfo.parameters.fn || 'console.log',
message:String = 'no message';
var url_request:URLRequest = new URLRequest(swf_url);
var swf_loader:Loader = new Loader();
swf_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, on_content_load);
swf_loader.load(url_request);
function on_content_load(e:Event): void
{
var loader_info:LoaderInfo = LoaderInfo(e.currentTarget);
// get the message param or use the default message
message = loader_info.parameters.message || message;
// if ExternalInterface is available, send data to js
if(ExternalInterface.available)
{
// send the swf url and the message param to the js function
ExternalInterface.call(js_function, { url: loader_info.url, message: message });
}
// show the redirected loaded swf
addChild(swf_loader);
}
HTML 边 :
对于这个例子,假设我们有一个这样的 .htaccess
文件:
.htaccess :
Redirect /redirect /new.swf?message=a%20message%20here
JavaScript :
function get_data_from_flash(data)
{
console.log('url : ' + data.url);
// gives :
// url : http://www.example.com/new.swf?message=a%20message%20here
console.log('message : ' + data.message);
// gives :
// message : a message here
}
HTML :
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400">
<param name="movie" value="loader.swf" />
<param name="flashvars" value="url=http://www.example.com/redirect&fn=get_data_from_flash" />
<object type="application/x-shockwave-flash" data="loader.swf" width="550" height="400">
<param name="flashvars" value="url=http://www.example.com/redirect&fn=get_data_from_flash" />
</object>
</object>
就这些!
如果想了解更多ExternalInterface
的使用方法,可以看看here.
希望能帮到你。
简单回答:
由于同源策略,你不能那样做。
您的请求中不会携带用户的cookies。