2014-10-26 8 views
5

में एक जावास्क्रिप्ट कोड इंजेक्ट करें मैंने स्विफ्ट भाषा कोड के साथ एक आईओएस वेब ब्राउज़र बनाया है। और उस वेब पृष्ठ पर एक स्क्रिप्ट इंजेक्षन के लिए एक अतिरिक्त बटन जोड़ने, लेकिन यह हमेशा दुर्घटना जब मैं इस प्रयास करें:वेबव्यू आईओएस

webView!.evaluateJavaScript("document.body.style.background = 'red';", nil) 

किसी भी विचार है कि यह कैसे तय करने के लिए? और फ़ाइल से जावास्क्रिप्ट कोड कैसे पढ़ा जाए, और उसके बाद उस वेबव्यू तत्व को इंजेक्ट करें।

मैं इस उदाहरण के रूप में, लेकिन WKWebView साथ कोड शैली का उपयोग करें: https://github.com/rshankras/WebViewDemo

आप इस सवाल का मैं जवाब में एक बुनियादी काम कर कोड की जरूरत है हल कर सकते हैं। और फ़ाइल से जावास्क्रिप्ट को लोड करने के लिए समाधान। और WKWebView तत्व में उस कोड को इंजेक्ट करें।

+0

आप दुर्घटना आप के बारे में कुछ जानकारी दे सकते हैं देशी तेज 2. जावास्क्रिप्ट कोड का उपयोग करने के? – delannoyk

+0

"थ्रेड 1: सिग्नल सिगैबर्ट" – user1731468

+0

क्या आप 'WKWebView' या 'UIWebView' का उपयोग कर रहे हैं? – mustafa

उत्तर

2

मुझे वर्तमान UIWebView API docs में आप जिस विधि का उपयोग कर रहे हैं (मूल्यांकन जावास्क्रिप्ट) नहीं देखते हैं, लेकिन यह WKWebView docs में है। शायद आप गलत एपीआई का उपयोग कर रहे हैं? इसके अलावा

let script = "document.body.style.background = 'red'" 
if let result = webView.stringByEvaluatingJavaScriptFromString(script) { 
    println("result is \(result)") 
} 

, मैं यकीन नहीं है अगर: शायद बजाय stringByEvaluatingJavaScriptFromString(_:) का उपयोग करके देखें "!" जरूरी है (एक झुकाव मुझे बताता है कि यह नहीं है), क्योंकि आपके कोड के आसपास कोई संदर्भ नहीं है। तो शायद दोनों संस्करणों को आजमाएं।

let path = NSBundle.mainBundle().pathForResource("jsFileName", ofType: "js") 
if let content = String.stringWithContentsOfFile(path, encoding: NSUTF8StringEncoding, error: nil) { 
    println("js content is \(content)") 
} 

डिस्क से लोड हो रहा है कि कैसे अपनी फ़ाइल की प्रतिलिपि की जा रही है चारों ओर चर का एक बहुत है और संग्रहीत तो अपने कुछ काम करने के लिए फिट करने के लिए जा रहा:

एक फ़ाइल से एक तार हो रही है कुछ की तरह है path आपकी संरचना के लिए चर।

+0

का उपयोग करता हूं फिर भी त्रुटि, क्या आप मुझे एक बुनियादी कोड नमूना प्रदान कर सकते हैं – user1731468

+0

उत्तर – mattr

+0

उत्तर में कोड कोड जोड़ा गया है, मैं WKWebview का उपयोग करता हूं, और मुझे यह त्रुटि देता हूं: 'WKWebView' का नाम 'stringByEvaluatingJavaScriptFromString' – user1731468

0

यदि आप WKWebView का उपयोग कर रहे हैं तो यह एक समाधान है।

if let scriptFile = NSBundle.mainBundle().pathForResource("script", ofType: "js") { 
    var error: NSError? 
    let scriptString = NSString(contentsOfFile: scriptFile, encoding: NSUTF8StringEncoding, error: &error) 
    if let error = error { 
     println("Error: Could not load script file => \(error)") 
    } else { 
     if let scriptString = scriptString { 
      let script = WKUserScript(source: scriptString, injectionTime: .AtDocumentEnd, forMainFrameOnly: true) 
      let controller = WKUserContentController() 
      controller.addUserScript(script) 

      let configuration = WKWebViewConfiguration() 
      configuration.userContentController = controller 

      let webView = WKWebView(frame: self.view.bounds, configuration: configuration) 
      self.webView = webView 
      self.view.addSubview(webView) 
     } 
    } 
} 
+0

जब मैं बटन पर क्लिक करता हूं (इस कोड के साथ)। सबकुछ खत्म हो गया है, मुझे कोई वेब व्यू तत्व नहीं दिखता है, केवल एक लंबा स्क्रॉल बार वाला एक सफेद पृष्ठ है। – user1731468

+0

अभी भी कुछ भी दिखाई नहीं दे रहा है। – user1731468

2

यह WKWebView के साथ काम करेगा। इंजेक्शन

//Hides name of "background1" element on the page 
var styleTag = document.createElement("style"); 
styleTag.textContent = 'div#background1, .after-post.widget-area  {display:none;}'; 
document.documentElement.appendChild(styleTag); 
1

के लिए अपनी कक्षा परिभाषा पर शीर्ष पर वेबकिट ढांचा जोड़ने के लिए

 var webView: WKWebView! 

func loadWebViewWithCustomJavaScript { 
    //Create Preferences 
    let preferences = WKPreferences() 
    preferences.javaScriptEnabled = true 
    //Initialise javascript file with user content controller and configuration 
    let configuration = WKWebViewConfiguration() 
    let scriptURL = NSBundle.mainBundle().pathForResource("Your File Name", ofType: "js") 
    var scriptContent = "" 
    do { 
     scriptContent = try String(contentsOfFile: scriptURL!, encoding: NSUTF8StringEncoding) 
    } catch{ 
    print("Cannot Load File") 
    } 
    let script = WKUserScript(source: scriptContent, injectionTime: .AtDocumentStart, forMainFrameOnly: true) 
    configuration.userContentController.addUserScript(script) 
    configuration.preferences = preferences 
    //Create WebView instance 
    webView = WKWebView(frame: CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height), configuration: configuration) 
    view.addSubview(webView) 
    //Finally load the url 
    let url = NSURL(string:"your URL") 
    let urlRequest = NSURLRequest(URL: url!) 
    webView.loadRequest(urlRequest) 
    } 

JavaScript कोड का नमूना न भूलें यह निम्नलिखित का उपयोग कर काम कर मिल गया। NSString के बजाय खेतों में प्रयुक्त स्ट्रिंग सुई hidesections.js में होना चाहिए दायर

let jsPath = NSBundle.mainBundle().pathForResource("hidesections", ofType: "js"); 
    let jsContent: String? 
    do 
    { 
     jsContent = try String(contentsOfFile: jsPath!, encoding: NSUTF8StringEncoding) 
    } 
    catch _ 
    { 
     jsContent = nil 
    } 
    webView.stringByEvaluatingJavaScriptFromString(jsContent!)