img div css iphone cocoa-touch uiwebview

div - UIWebView y archivo css local



tags div shiny (4)

Desafortunadamente, UIWebView no proporciona una API para interceptar y modificar las solicitudes que realiza al cargar un recurso. Esto significa que cualquier enfoque que intentes será, en cierta medida, hackeado.

El primer enfoque que probaría es:

  • Proporcione su propio delegado UIWebViewDelegate en la vista.
  • Implemente -webView:shouldStartLoadWithRequest:navigationType: y devuelva NO cuando vea que se están realizando las solicitudes de CSS.
  • Una vez que la vista haya terminado de cargar el recurso principal, use -stringByEvaluatingJavaScriptFromString: para -stringByEvaluatingJavaScriptFromString: JavaScript en la página que carga / establece dinámicamente la hoja de estilo que desea usar.

En el JavaScript crearía un elemento / nodo <link> completamente nuevo en el documento en lugar de intentar modificar el existente.

Quiero diseñar una página web para el escritorio para que esté presentable en un UIWebView en iPhone. No tengo acceso al servidor web desde el que se originan las páginas. Me gustaría hacer esto cambiando el atributo href del elemento de la hoja de estilo <link> programación.

Hago lo siguiente con mi IBOutlet UIWebView *webView .

NSString *cssPath = [[NSBundle mainBundle] pathForResource:@"MyStyleSheet" ofType:@"css"]; NSString *js = @"document.getElementsByTagName(''link'').setAttribute(''href'',''"; NSString *js2 = [js stringByAppendingString:cssPath]; NSString *finalJS = [js2 stringByAppendingString:@"'');"]; //check element structure NSString *res = [webView stringByEvaluatingJavaScriptFromString:finalJS];

Esto no funciona. El uso del [webView stringByEvaluatingJavaScriptFromString:] y hacer un cambio en el [webView stringByEvaluatingJavaScriptFromString:] backgroundColor del cuerpo realmente funciona; se hace como un ejercicio para ver si estaba usando la llamada correctamente.

¿Estoy ladrando el árbol equivocado?



Su código debería funcionar, si elige el índice 0 de los elementos encontrados:

NSString *js = @"document.getElementsByTagName(''link'')[0].setAttribute(''href'',''"; NSString *js2 = [js stringByAppendingString:cssPath]; NSString *finalJS = [js2 stringByAppendingString:@"'');"]; [webview stringByEvaluatingJavaScriptFromString:finalJS];

Te perdiste [0]


SWIFT 3

Si usted (como yo) solo usa un fragmento HTML (no una página web completa) necesita agregar su archivo css local en el encabezado del fragmento HTML.

Por lo tanto, defino un encabezado html como este:

let htmlHeader = "<html> /n <head> /n <link href=/"default.css/" rel=/"stylesheet/" type=/"text/css/" /> /n </head> /n <body> /n"

y un pie de página como este:

let htmlFooter = "</body> /n </html>"

Luego encuentra la baseURL para el css así:

let baseURLForCss = Bundle.main.url(forResource: "default", withExtension: "css")

Y cargue el fragmento HTML con su propio css así:

webView.loadHTMLString(String.init(format: "%@%@&@", htmlHeader, htmlSnippet, htmlFooter), baseURL: baseURLForCss)