2009-10-01 15 views
5

Szukałem WSZĘDZIE dla tego, nie mogę znaleźć niczego. Zasadniczo muszę przechowywać całą witrynę wewnątrz mojego iPhone'a z kilku interesujących powodów. Niezależnie od tego, nie mogę dowiedzieć się, jak wyświetlić go poprawnie w moim interfejsie UIWebView.Wyświetlanie UIWebView lokalnie przechowywana strona internetowa (HTML, obrazy, JavaScript)

EDIT:. Powinienem wyjaśnić, mogę załadować oryginalny plik HTML, a ja chagned wszystkie pathing być lokalne, z wyjątkiem nic nie zostanie połączony w

Oto kod

self.dataDetectorTypes = UIDataDetectorTypeLink; 
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[self loadRequest:request]; 

index.html ma kilka <script type="text/javascript" src="somescript.js">

Żaden kodu JS pobiera wykonywane

+0

Co to znaczy "nic nie zostanie połączone w" tu na myśli? –

Odpowiedz

13

Wygląda na to, że ładujesz kod HTML z wnętrza swojego pakietu. Oznacza to, że wszystkie dodatkowe pliki (.js, .css i dowolne pliki multimedialne) również muszą znajdować się w pakiecie. Pierwszą rzeczą, którą należy sprawdzić, jest zajrzenie do zawartości pliku wykonywalnego i upewnienie się, że pliki js itd. Są uwzględnione.

Jeśli to wygląda dobrze, następnym krokiem jest sprawdzenie, czy pliki html, js lub css odwołują się do treści za pomocą względnych lub bezwzględnych adresów URL. Jeśli istnieje bezwzględna ścieżka do treści internetowych, to UIWebView będzie próbował pobrać tę zawartość za każdym razem, więc będzie działać tylko wtedy, gdy masz połączenie sieciowe. Jeśli ścieżka jest względna, to zajrzy do pakietu, aby zobaczyć, czy taki plik istnieje.

Po dołączeniu html i treści do pliku projektu XCode prawdopodobnie przeciągnąłeś plik (y) na boczny pasek projektu i zapytano, czy "rekursywnie tworzyć grupy dla dowolnych dodanych folderów" lub "Utwórz folder" Odnośniki do wszystkich dodanych folderów. "

Wartość domyślna to pierwsza, co oznacza, że ​​XCode tworzy żółty folder w projekcie, ale zignoruje hierarchię katalogów na dysku, gdy nadejdzie czas na wygenerowanie pakietu wyjściowego. Jeśli wybierzesz drugą opcję, folder będzie niebieski, a jeśli spojrzysz na pakiet wyjściowy, zobaczysz, że cała hierarchia folderów została zreplikowana.

Pierwsze działa na prostych stronach internetowych, na których wszystko znajduje się na tym samym poziomie folderów i można użyć metody, którą podano powyżej, aby ją załadować. W drugim przypadku działa lepiej, jeśli strona jest złożona i referencje treści w podfolderach w takim przypadku trzeba załadować stron internetowych z ścieżki względnej (powiedzmy folderze Strony internetowe na):

NSString *path = [[NSBundle mainBundle] 
       pathForResource:@"index" ofType:@"html" 
        inDirectory:@"webpages"]; 

ostatnią rzeczą do sprawdzenia jest to, czy istnieją jakieś znaczniki BASE w pliku html. Jest to sposób na określenie domyślnego adresu lub celu dla wszystkich linków na stronie, ale może on zbijać łącza do stron WWW.

+0

To jest Laura. Utknąłem w tym samym problemie i kiedy próbowałem użyć ur roztworu, wtedy w moim przypadku "ścieżka" zwraca zero. Chociaż dodałem pliki html i zasoby w ten sam sposób, używając drugiej opcji "Utwórz odniesienia do folderu dla wszystkich dodanych folderów". Czego mi brakuje? Proszę pomóż mi. Byłbym bardzo wdzięczny. – Aisha

+0

Cześć Laura. Jeśli metoda "pathForResource" zwróci zero, oznacza to, że nie może znaleźć pliku. Jedna rzecz do wypróbowania to znaleźć binarny plik .app w katalogu "kompilacji" w wyszukiwarce, a następnie kliknąć prawym przyciskiem myszy i wykonać "Pokaż zawartość paczki". Pokazuje to, co zawiera główny pakiet aplikacji. Zajrzyj do środka, aby zobaczyć plik HTML. Jeśli znajduje się w folderze, nazwa tego folderu musi znajdować się w parametrze "inDirectory" w wywołaniu pathForResource. Jeśli jest na najwyższym poziomie, nie masz odniesienia do folderu. Usuń i ponownie przeciągnij go do projektu lub użyj wersji pathForResource bez inDirectory. HTH. – Ramin

1

musisz ustawić to:

myWebView.dataDetectorTypes = UIDataDetectorTypeLink 
7

Problemem jest to, że tej rozmowy:

NSURL *url = [NSURL fileURLWithPath:path]; 

nie Skonfiguruj baseURL a więc względne ścieżki w pliku .html dla rzeczy takich jak JavaScript, CSS, obrazy itp nie działają.

Zamiast korzystać z tego:

url = [NSURL URLWithString: [path lastPathComponent] 
      relativeToURL: [NSURL fileURLWithPath: [path stringByDeletingLastPathComponent] 
             isDirectory: YES]]; 

i potem takie rzeczy jak "styles.css" w indeksie.Plik html zostanie znaleziony IFF skopiowany do pakietu obok pliku .html.

0

Upewnij się, że pliki .js znajdują się w Twojej kopii do sekcji pakunku zasobów, a nie w sekcji kompilacji. Xcode domyślnie umieszcza je w grupie kompilacji.

0

Podczas dodawania ścieżkiDla zasobu w Słowniku wyświetlany jest błąd ciągu zerowego.

0

Moja próba polegała na uruchomieniu całej strony internetowej z pliku projektu Xcode. W tym celu musisz:

  1. Podczas importowania pliku wybierz "Utwórz odniesienia do folderu dla wszystkich dodanych folderów".

  2. Skonfiguruj widok WWW, ale upewnij się, że ustawiono ścieżkę względną, jak wspomniano wcześniej.

    NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" 
                 ofType:@"html" 
                 inDirectory:@"Directory"]; 
    
    NSURL *url = [NSURL URLWithString:[path lastPathComponent] relativeToURL: 
         [NSURL fileURLWithPath: [path stringByDeletingLastPathComponent] 
          isDirectory:YES]]; 
    
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    
    [self.currentWebView loadRequest:request]; 
    
Powiązane problemy