objective-c – 在Cocoa WebView中防止Flash

objective-c – 在Cocoa WebView中防止Flash,第1张

概述在我的 Cocoa应用程序中,我想阻止Flash加载到WebView中,并让用户决定是否应该为每个页面显示Flash. (这与通过ClickToFlash插件或Safari扩展程序已经提供的行为相同.由于许可问题,捆绑任何这些扩展可能不是一种选择.) 不幸的是,我试图避免使用的大部分Flash都是通过专门设计的嵌入式JavaScript生成的,以防止轻松阻塞,因此我无法过滤原始HTML以包含Fla 在我的 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

然后你只需要创建一个自定义的WebKit插件来处理“application / my-plugin-type”并让插件什么也不做.

总结

以上是内存溢出为你收集整理的objective-c – 在Cocoa WebView中防止Flash全部内容,希望文章能够帮你解决objective-c – 在Cocoa WebView中防止Flash所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1017321.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存