Tengo una aplicación que usa WebKit WebView y me gustaría asignar las URL que se cargan en este WebView con un protocolo URL personalizado a una URL HTTP diferente. Por ejemplo, digamos que estoy cargando:Mapa Protocolo de URL personalizado a HTTP (¿usando NSURLProtocol?)
personalizado: // ruta/a/recurso
me gustaría internamente en realidad la carga:
http://something-else.com/path/to/resource
En otras palabras, el protocolo personalizado sirve casi como una taquigrafía. Sin embargo, no puedo usar -webView: resource: willSendRequest: redirectResponse: fromDataSource :, porque quiero que WebKit realmente crea que esta es la URL en cuestión, no simplemente para redireccionar de una a la otra.
Hasta ahora he intentado utilizar una subclase NSURLProtocol personalizada. Sin embargo, esto está resultando más complicado de lo que pensé en un principio porque, al menos a mi entender, tendré que hacer la carga real en el método startLoading de la subclase NSurLProtocol. Me gustaría una forma de entregar el trabajo al cargador de protocolo HTTP existente, pero no puedo encontrar una manera fácil de hacerlo.
¿Alguien tiene una recomendación para esto, o tal vez una forma alternativa de resolver este problema?
Gracias!
¿Tiene esto el efecto de hacer que la vista web piense que está en la URL del protocolo personalizado? Si solo cargara una nueva URL desde ese bloque if, creo que estaré en la misma posición que antes: creando de manera efectiva una redirección. Pero tal vez estoy malinterpretando la forma en que se supone que debo cargar una nueva URL desde allí. –
"¿Tiene esto el efecto de hacer que la vista web piense que está en la URL del protocolo personalizado?" No, definitivamente no. Si su objetivo es establecer la href.location en una cosa y cargar otra, entonces esta solución no lo llevará allí. Lo siento. En este caso, cuando se detecta el esquema personalizado, incluso lo mata, por lo que el archivo location.href nunca cambia. "creando efectivamente una redirección" No es lo mismo que una redirección. En una redirección, la primera URL se carga, maneja, etc. Luego, se carga la siguiente URL. Usar el delegado de política y llamar [listener ignore] elimina por completo la primera carga de URL. – isaiah