2010-10-07 11 views
7

Po pewnym czasie przeglądania nadal nie mogę tego zrozumieć. Dodałem stronę HTML i jej katalog obrazów do mojego projektu Grupy zasobów w Xcode (skopiowałem je).Cocoa WebView - Ładowanie lokalnej strony HTML

Kiedy próbuję załadować WebView za pomocą poniższego kodu, tekst jest wyświetlany prawidłowo, ale obrazy nie są załadowane.

EDYCJA: Przepraszam za opóźnienie, oto podstawowy html, który się nie powiódł.

<html> 
    <body> 
     <img src="images/bg.png"></img> 
    </body> 
</html> 

A moja edytowany kod wygląda następująco -

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
[[webView1 mainFrame] loadRequest:[NSURLRequest requestWithURL:url]]; 

EDIT2: Wystarczy sobie sprawę, że był problem ze ścieżką. Podobno <img src = "images/bg.png"> nie działa, ale jeśli skopiuję plik bg.png do katalogu głównego i powiemy <img src = "bg.png"> wszystko działa poprawnie. Nadal nie jestem pewien, co się z tym dzieje.

+0

Pokaż nam przykładowy kod HTML odwołujący się do obrazu. –

Odpowiedz

8

Rozważmy następujący sposób:

  1. Zamiast się ścieżkę zasobów i zszywanie podścieżkę na nim siebie, ask the bundle to give you the correct path.
  2. Zamiast obsługiwać ścieżki w ogóle, ask the bundle to give you the correct URL. (Wymaga systemu Mac OS X 10.6 lub nowszego).
  3. Zamiast wstrzykiwać zawartość HTML bezpośrednio do ramki, ask the WebView to load the URL.

Spowoduje to zmniejszenie kodu do dwóch linii, które, jeśli kod HTML jest prawidłowy, będą działać.

+0

W rzeczywistości moje pierwsze wdrożenie było właśnie takie. Ale widziałem jedno z pytań SO, w którym ktoś miał ten sam problem, ale naprawił go, wdrażając go w ten sposób. Zastanawiałem się, czy ma to coś wspólnego z baseURL. –

+1

Tejaswi Yerukalapudi: Masz link do jednego z tych pytań? –

+0

Hmm, nie mogę tego teraz znaleźć, ale zredagowałem moją implementację, aby to zrobić. Wygląda na to, że mój problem polega na użyciu składni przechodzącej do podfolderów, aby pobrać obrazy w HTML. W pewnym sensie, dlaczego tak się dzieje, ale nie jestem pewien, co mogę zrobić, aby to naprawić, dziękuję za całą pomoc! –

3

ten kod działa dla mnie (tylko problemy z płótnie):

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"index" 
                ofType:@"html" 
               inDirectory:@"html_files_folder"]; 
NSURL* fileURL = [NSURL fileURLWithPath:filePath]; 
NSURLRequest* request = [NSURLRequest requestWithURL:fileURL]; 
[[webView mainFrame] loadRequest:request]; 
1

Trzeba będzie uzyskać dane plików graficznych w base64 ciąg. I umieść ten ciąg w tagu img, jak poniżej.

<img src="data:image/png;base64,iVBORw0KGgoAAAANS..." /> 

Zobacz to więcej szczegółów: http://danielmclaren.com/node/90

4

myślę, że tutaj problem jest z tym, jak pliki są kopiowane do katalogu zasobów w fazie budowy. Wszystkie foldery pokazane jako grupy w Xcode zostaną spłaszczone, gdy zostaną skopiowane. Jeśli dodajesz do projektu całą strukturę folderu witryny, podczas dodawania struktury musisz wybrać opcję "Utwórz odniesienia do folderu dla dowolnych dodanych folderów".

Przykład: Mam plik html, który odwołuje się do obrazu w folderze o tej samej nazwie.Dodam to wszystko pod moim wyborze projektu odniesienia folderu ':

Adding the files

Pliki będzie wyglądać w moim projekcie (uwaga na niebieski folder):

Project tree

Kiedy projekt Zostanie utworzony folder zawartości internetowej:

Resources folder in the bundle

Nie ma potrzeby, aby rozpocząć ustawianie podstawowych adresów URL lub ładowanie za pomocą ciągów. Stronę internetową można teraz pomyślnie załadować w następujący sposób:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"LocalTestWeb" withExtension:@"html"]; 
[[self.webView mainFrame] loadRequest:[NSURLRequest requestWithURL:url]]; 
Powiązane problemy