UIWebView and local css file

后端 未结 4 523
盖世英雄少女心
盖世英雄少女心 2020-12-13 03:10

I want to style a web page meant for the desktop so that it is presentable on a UIWebView on iPhone. I do not have access to the web server from which the pages originate. I

相关标签:
4条回答
  • 2020-12-13 03:57

    SWIFT 3

    If you (like me) only use a html snippet (not a complete web page) you need to add your local css file in the header of the html snippet.

    I therefore define a html header like this:

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

    and a footer like this:

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

    Then find the baseURL for the css like this:

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

    And load the html snippet with your own css like this:

    webView.loadHTMLString(String.init(format: "%@%@&@", htmlHeader, htmlSnippet, htmlFooter), baseURL: baseURLForCss)
    
    0 讨论(0)
  • 2020-12-13 04:03

    You can load CSS from local project directory

    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSURL *baseURL = [NSURL fileURLWithPath:path];
    [webView loadHTMLString:htmlString baseURL:baseURL];
    

    detail info check this site : http://iphoneincubator.com/blog/windows-views/uiwebview-revisited

    0 讨论(0)
  • 2020-12-13 04:03

    Your code should work, if you choose index 0 of the found elements:

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

    You missed [0]

    0 讨论(0)
  • 2020-12-13 04:15

    Unfortunately UIWebView doesn't provide an API for intercepting and modifying the requests that it makes while loading a resource. This means that any approach you try will be hack-ish to a certain extent.

    The first approach I would try is:

    • Provide your own UIWebViewDelegate delegate on the view.
    • Implement -webView:shouldStartLoadWithRequest:navigationType: and return NO when you spot the CSS requests being made.
    • Once the view has finished loading the main resource, use -stringByEvaluatingJavaScriptFromString: to inject JavaScript into the page that dynamically loads/sets the stylesheet that you want to use.

    In the JavaScript I would create an entirely new <link> element/node on the document instead of trying to modify the existing one.

    0 讨论(0)
提交回复
热议问题