2009-07-12 59 views
1

我有一個非常簡單的Mac Cocoa應用程序,它只是一個Web視圖,可以用一些CSS和JavaScript加載HTML文件。我已經迷上了應用程序委託給此方法:如何在WebView中啓用JavaScript

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    NSString* filePath = [[NSBundle mainBundle] pathForResource: @"index" ofType: @"html"]; 
    NSURL *url = [NSURL URLWithString: filePath]; 
    [[self.webView mainFrame] loadHTMLString: [NSString stringWithContentsOfFile: filePath] baseURL: url]; 
} 

index.html文件包含以下內容:

<html> 
    <head> 
    <title>Hello, World!</title> 
    <link href="style.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript"> 
     jQuery(function($){ 
     $('h1').fadeOut() 
     }) 
    </script> 
    </head> 
    <body> 
    <h1>Hello, World!</h1> 
    </body> 
</html> 

style.css文件被加載正確的,因爲我設置的背景爲灰色因爲我知道它可以從資源包中加載其他資源。 JavaScript代碼不會被執行。如果我在Safari中打開index.html,則Hello World h1會按預期消失。爲什麼這不會在我的WebView中的應用程序中發生?我必須做些什麼來啓用JavaScript?在Interface Builder中檢查JavaScript旁邊的框。

該代碼,這是可以在http://github.com/pjb3/WebViewApp

回答

4

你不必做任何事情來啓用JavaScript;它在默認情況下在WebView中啓用。就像你說的,你可以隨時在Interface Builder中檢查JavaScript複選框是否被選中。

,你所要做的,不過,是確保你指定的baseURL是正確的(因爲在HTML文件中你指的是jquery.js,只要使用的文件名相對URL)和你已將包含在jquery.js文件中,並放入捆綁資源

您發佈將導致爲url變量nil值碼:+URLWithString:需要一個有效的URL字符串(符合RFC 2396)作爲參數(這您所提供的文件系統路徑是不是)。你想要的是+fileURLWithPath:,而且你還需要使用index.htmljquery.js所在目錄的文件系統路徑,你可以通過從你得到的路徑中刪除文件名(使用NSString-stringByDeletingLastPathComponent:)來獲得文件路徑。這裏是你如何得到正確的baseURL

NSURL *url = [NSURL fileURLWithPath:[filePath stringByDeletingLastPathComponent]]; 
+0

我已經做出了這些更新,這是有道理的,但它似乎仍然沒有工作。你可以在http://github.com/pjb3/WebViewApp – pjb3 2009-07-12 13:20:00

+0

看到代碼啊,我明白了。我不知道你的意思,「將jquery.js文件包含到捆綁資源中」。我拖動資源文件夾中的.js文件到「複製軟件包資源」中,這個東西:),在目標中的WebViewApp下。一切都很好,謝謝! – pjb3 2009-07-12 13:53:15

0

除了什麼hasseg說:爲什麼不使用此加載的文件呢?

NSURL *url = [NSURL fileURLWithPath:filePath]; 
[self.webView setMainFrameURL:url]; 
2

只是一個快速更新的人還在爲此苦苦掙扎......我在那裏我有一個HTML頁面中<頭> < /頭>部分加載Prototype.js庫完全相同的問題的頁面。但是,當我在Cocoa應用程序的WebView中打開同一頁面時,該庫沒有被加載。實際上,沒有加載腳本文件(甚至是我自己的)似乎在WebView中工作。

我從鏈接pjb3提供的,下載了上面的github代碼,希望他可能找到了一個修復並更新它。沒有這樣的運氣。它仍然有同樣的問題。

然後我決定查看已編譯應用程序的包內容(這樣就可以將WebViewApp /內容/資源從構建/調試或構建/發佈目錄中XCode已編譯您的應用程序).​​.. 啊哈!他放在XCode項目的Resources部分中的JavaScript文件實際上並沒有被複制到構建應用程序的Resources目錄中。我看着我的項目,這是同樣的問題。 修復?只需將添加的任何腳本拖放到XCode中應用目標的「複製捆綁軟件資源」部分,然後瞧,他們就會在那裏(而且事情會真正起作用!)。

我認爲你放入參考資料的所有內容都是通過自動方式複製的,但我想不是。不幸的是,對於WebView,除非你做了一些工作,否則你並不具備火狐瀏覽器或Safari瀏覽器可能會讓這個問題更容易找到的所有優秀的網絡調試功能。因此,如果有疑問,請檢查您的實際編譯的應用程序是否在其資源目錄下有需要的資源(這可能是程序員的版本「是否插入?」?)。這讓我感到頭痛不已,對於失去的時間我唯一的安慰就是我可以拯救同樣的其他人。快樂的編碼!

相關問題