【问题标题】:Cordova iOS 6.1.0 How to display images on external screen in WKwebviewCordova iOS 6.1.0 如何在 WKwebview 的外部屏幕上显示图像
【发布时间】:2020-11-27 05:50:21
【问题描述】:

我有一个 Cordova 应用程序,它使用这个插件 (cordova-plugin-wkwebview-external-screen) 通过 Airplay/HDMI 适配器在外部屏幕上全屏显示图像/媒体(类似于 Apple 的 Keynote)。

使用 UIwebview 一切正常,但我在使用 WKwebview 的外部屏幕上显示媒体时遇到问题。我现在使用的是 Cordova iOS 6.1.1 (CLI 10.0)。

我正在使用window.WkWebView.convertFilePath() 在我的主(控制)屏幕上显示媒体,但转换后的文件 url 和“file://...” url (cordova.file.dataDirectory + ‘image.jpg’) 在外部屏幕上都不起作用。

其他信息:

  • 我的外屏是通过ExternalScreen.loadHTML('secondary.html'); 启动的,但外屏的窗口中似乎没有Cordova 可用(即使在secondary.html 中包含了cordova.js)。
  • 我的 index.html(控制)和 secondary.html(显示)文档中的“白名单”元数据是相同的。

如何获得将显示在我的第二个(外部)屏幕上的图像 URL?

更新: 我更新了plugin 的getWebView 函数,添加了allowFileAccessFromFileURLs、allowUniversalAccessFromFileURLs、allowsInlineMediaPlayback 和mediaTypesRequiringUserActionForPlayback 配置:

- (WKWebView*)getWebView {
    if (!self.externalWebView) {
        UIScreen* externalScreen = [[UIScreen screens] objectAtIndex: 1];
        CGRect screenBounds = externalScreen.bounds;
        self.externalWebView = [[WKWebView alloc] initWithFrame: screenBounds configuration: [[WKWebViewConfiguration alloc] init]];

        // I added these four configurations...
        [self.externalWebView.configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
        [self.externalWebView.configuration setValue:@YES forKey:@"allowUniversalAccessFromFileURLs"];
        self.externalWebView.configuration.allowsInlineMediaPlayback = TRUE;
        self.externalWebView.configuration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;

        self.externalWindow = [[UIWindow alloc] initWithFrame: screenBounds];
        self.externalWindow.screen = externalScreen;
        self.externalWindow.clipsToBounds = YES;
        [self.externalWindow addSubview:self.externalWebView];
        [self.externalWindow makeKeyAndVisible];
        self.externalWindow.hidden = NO;
    }
    return self.externalWebView;
}

不幸的是,这些更改不会似乎影响externalView。我暂时使用这个插件作为解决方法 (cordova-plugin-wkwebview-sandbox-webserver),但即使这样我也无法让 HTML5 视频自动播放 - 所以我怀疑我是否将配置设置放在正确的位置?

【问题讨论】:

    标签: ios cordova wkwebview


    【解决方案1】:

    问题是这个插件没有更新。从我在插件中看到的内容来看,它正在尝试使用 file:// 加载,但开箱即用不再有效。

        NSString* a = @"file://";
        baseURLAddress = [a stringByAppendingString:baseURLAddress];
    

    您可以尝试将首选项allowFileAccessFromFileURLs 和allowUniversalAccessFromFileURLs 添加到此插件在getWebView 方法中this file 中创建的WKWebView 中

    您可以将您的工作基于this plugin,代码供参考

     [wkWebView.configuration.preferences setValue:@(_allowFileAccessFromFileURLs) forKey:@"allowFileAccessFromFileURLs"];
    

    虽然这不是一个直接的答案,但克隆 cordova-plugin-wkwebview-external-screen 并添加这些首选项是您的最佳选择。

    【讨论】:

    • 感谢您的回答!不幸的是,将allowFileAccessFromFileURLs 和allowUniversalAccessFromFileURLs 添加到getWebView 配置并不能解决问题。我暂时使用这个插件(github.com/bigeyex/cordova-plugin-wkwebview-sandbox-webserver)来提供文件,但视频也不会自动播放(即使使用allowsInlineMediaPlayback 和mediaTypesRequiringUserActionForPlayback 配置设置) - 所以我不确定我是否做得对要么 - 我会用示例代码更新我的问题。
    • 您能否尝试为您的 www 文件夹中的文件提供一个“干净”的基础以解决您的问题?你也在使用我为你的主网页视图推荐的这个插件吗?
    • 是的,推荐的插件 (github.com/globules-io/cordova-plugin-ios-xhr) 可以在主 webview 上工作,但由于某种原因不能在 externalScreen 上工作?
    • 既然沙盒服务器插件正在实现我的最终目标 - 我会将这个问题标记为已回答并专注于我的下一个挑战 (stackoverflow.com/questions/65115592/…)。我希望有一种方法可以为外部 web 视图设置 WKwebview 配置,这可能会解决这两个问题。感谢您的意见!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    相关资源
    最近更新 更多