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 devuelvaNO
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?
Puedes cargar CSS desde el directorio del proyecto local
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
[webView loadHTMLString:htmlString baseURL:baseURL];
información detallada consulte este sitio: http://iphoneincubator.com/blog/windows-views/uiwebview-revisited
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)