ilj*_*ing 6 flash cocoa webkit objective-c
在我的Cocoa应用程序中,我想阻止Flash加载到WebView中,并让用户决定是否应该为每个页面显示Flash.(这与通过ClickToFlash插件或Safari扩展程序已经提供的行为相同.由于许可问题,捆绑任何这些扩展可能不是一种选择.)
不幸的是,我试图避免使用的大部分Flash都是通过专门设计的嵌入式JavaScript生成的,以防止轻松阻塞,因此我无法过滤原始HTML以包含Flash对象.
此外,我无法为我的WebView禁用JavaScript,因为当我关闭JavaScript时,我要显示的页面看起来完全不同.
在执行JavaScript之后,但是在加载Flash插件之前,是否有可用于修改页面DOM的通知/挂钩?
或者我应该追求不同的方向?
谢谢,Ilja
理想情况下,您只需定义自己的WebKit插件即可处理application/shockwave-flash
MIME类型并使插件不执行任何操作.
但是,遗憾的是,没有办法控制所有注册相同MIME类型的多个WebKit插件的优先级.WebKit插件的加载顺序是完全随机且随意的,因此您不能保证您的插件将处理Flash对象而不是Flash插件.
我发现的唯一方法就是子类化WebView
并覆盖私有方法,-_pluginForMIMEType:
如下所示:
@class WebBasePluginPackage;
@interface WebView ( MyFlashPluginHack )
- (WebBasePluginPackage *)_pluginForMIMEType:(NSString *)MIMEType;
@end
@implementation MyWebView
- (WebBasePluginPackage *)_pluginForMIMEType:(NSString *)MIMEType
{
if ( [MIMEType isEqualToString:@"application/x-shockwave-flash"] )
{
return [super _pluginForMIMEType:@"application/my-plugin-type"];
}
else
{
return [super _pluginForMIMEType:MIMEType];
}
}
@end
Run Code Online (Sandbox Code Playgroud)
然后你只需要创建一个自定义的WebKit插件来处理"application/my-plugin-type"并让插件什么也不做.
归档时间: |
|
查看次数: |
2044 次 |
最近记录: |