Libro de registro de problemas de iOS: UIWebView no es válido después de configurar permite InlineMediaPlayback en SÍ, ejecutar o reproducir video en pantalla completa

0. Descripción de antecedentes

El problema que encontré no fue el que se indica en el título, sino al revés.

Como se indica en el documento oficial, el parámetro allowInlineMediaPlayback de UIWebView en el iPhone es falso de forma predeterminada, y el efecto operativo es que se mostrará un reproductor de pantalla completa durante la reproducción de video web. Si no necesita jugar en pantalla completa, establezca allowInlineMediaPlayback en verdadero.

Esto es lo que necesito, los videos web deben reproducirse directamente en la página, y el efecto real es exactamente ese. ¡Pero lo extraño es que al mirar el código, encontré que el código no establece allowInlineMediaPlayback en YES! ! !

1. Búsqueda de problemas

Primero creé un proyecto de demostración para verificar este problema. El código principal es el siguiente:

    UIWebView *uiWebView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:uiWebView];
    NSString *urlString = @"带有视频的网页地址";
    [uiWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];

El efecto de ejecución real es el que se indica en el documento oficial, y el valor predeterminado es la reproducción a pantalla completa.

Y el mismo código, lo puse en mi proyecto, el predeterminado es jugar en la página web ...

Al principio, se sospechaba que había otras configuraciones del proyecto que afectarían el efecto real, como el procesamiento de pantalla horizontal de la página, los parámetros de configuración del proyecto, etc. Pero luego de revisarlo nuevamente, se encontró que no era la influencia de estos puntos.

Además, durante el proceso de investigación, hubo varios cambios en el efecto de la operación, que estuvo en línea con la descripción en el documento oficial por un tiempo, pero no por un tiempo.

Más tarde, puse mi sospecha en el parámetro especial allowInlineMediaPlayback.

2. La causa del problema

Debido a que busqué el proyecto del proyecto a nivel mundial, en todos los códigos, solo los códigos de otras páginas configurados allowInlineMediaPlayback en YES, y la página que probé no operaba este atributo. Por lo tanto, sospecho que el parámetro allowInlineMediaPlayback existe globalmente en UIWebView .

Luego verificación de código:

   UIWebView *uiWebView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:uiWebView];
    NSString *urlString = @"带有视频的网页地址";
    UIWebView *tempUIWebView = [UIWebView new];
    tempUIWebView.allowsInlineMediaPlayback = YES;
    [uiWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];

De hecho, el efecto es el mismo. Las operaciones en otros objetos webView también afectarán el efecto de reproducción de video del webView actual.

Verificación inversa:

    UIWebView *uiWebView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:uiWebView];
    uiWebView.allowsInlineMediaPlayback = YES;
    NSString *urlString = @"带有视频的网页地址";
    UIWebView *tempUIWebView = [UIWebView new];
    tempUIWebView.allowsInlineMediaPlayback = NO;
    [uiWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];

El efecto es el mismo.

Index, el problema que encontré y el problema mencionado en el título de este artículo, pueden ser causados ​​por la naturaleza global del parámetro allowInlineMediaPlayback, por lo que el problema de inconsistencia entre el código y el efecto de ejecución ocurre durante el desarrollo real.

No hay ningún atributo allowInlineMediaPlayback en WKWebView, pero debe pasarse al objeto de configuración en el método de inicialización. Quizás debido a este cambio, WKWebView no tiene los problemas anteriores.

3. Solución

El punto principal para resolver este problema es que el controlador que usa UIWebView debe inicializarse explícitamente durante la inicialización para proteger la influencia de otras páginas.

Las soluciones específicas pueden referirse a las dos siguientes:

  1. Al crear un UIWebView en el controlador, asigne explícitamente un valor a allowInlineMediaPlayback o cree una subclase unificada de UIWebView.
  2. Use la categoría para reemplazar los métodos de inicialización initWithFrame:y de UIWebView initWithCoder:para forzar la inicialización de la propiedad allowInlineMediaPlayback.

Supongo que te gusta

Origin blog.csdn.net/jhq1990/article/details/89680538
Recomendado
Clasificación