2016-01-23 29 views
1

這是我多年來作爲一名Web開發人員在嘗試使用Xcode和Swift(最新版本)編寫OSX應用程序後的第一個問題。OSX上的Swift:WebView stringByEvaluatingJavaScriptFromString不起作用

我想要做的是在我用Webkit/WebView加載的網頁上執行JavaScript。 我嘗試了很多方法(互聯網充滿了答案 - 主要針對iOS),但對於OSX + Swift + WebView(而不是UIWebview或WkWebView)來說,這種方法很少。

我最新的做法是這樣的ViewController.swift:

import Cocoa 
import WebKit 

class ViewController: NSViewController, WebFrameLoadDelegate { 
    var myWebView:WebView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     myWebView = WebView(frame: self.view.frame) 
     myWebView.frameLoadDelegate = self 

     //Load URL 
     let url = NSURL(string: "http://google.com"); 
     let request = NSURLRequest(URL: url!); 

     myWebView.mainFrame.loadRequest(request) 
     self.view.addSubview(myWebView) 

     //Insert JS 
     myWebView.stringByEvaluatingJavaScriptFromString("alert('test');"); 

     let script = "document"; 
     if let returnedString = myWebView.stringByEvaluatingJavaScriptFromString(script) { 
      print("the result is \(returnedString)"); 
     } 

    } 

    /* 
    * Page ready 
    */ 

    func webViewDidFinishLoad(myWebView : WebView) { 
     print("WvFinished") 
    } 

    func webViewDidStartLoad(myWebView : WebView) { 
     print("WvStarted") 
    } 

} 

無論是JS-警報,也不是HTML文檔作品的回報。

PS:「webViewDidFinishLoad」和「webViewDidStartLoad」似乎都不會被執行。

我真的很感激任何幫助。我想我幾乎搜索了整個網絡的所有提示 - 但沒有爲我工作。

預先感謝您!

最佳,

亞歷

+0

這並不是iOS的WebFrameLoadDelegate沒有方法webViewDidFinishLoad和/或webViewDidStartLoad –

+0

如果你想監視你的網頁加載,你可以使用'FUNC web視圖(發件人:WebView中!didFinishLoadForFrame框架:WebFrame){ 打印(「didFinishLoadForFrame 「) }' –

+0

你完全正確,謝謝。我試着在這裏使用「stringByEvaluatingJavaScriptFromString」方法,但結果相同:沒有錯誤,但根本沒有效果。你有好主意嗎? – AlexDoe

回答

0

關於myWebView.windowScriptObject.evaluateWebScript("alert('test'‌);");,你也應該這樣做webView(_:runJavaScriptAlertPanelWithMessage:initiatedBy:),然後你可以打印message,你會得到警告的消息。如果你想彈出一個警告框,你需要自己動手。

相關問題