2015-09-15 3 views
1

Я делаю мобильный браузер с собственными объявлениями в swift, и я хочу запустить скрипт. Я уже добавляю локальный файл javascript, но он открывается в другом окне и переопределяет содержимое веб-просмотра. Возможно ли запустить код javascript на странице веб-просмотра? а не в другом окне, только на странице странице content.Hope вы получите егоЗагрузить локальный javascript в webview?

+0

Вы используете 'UIWebView' или' WKWebView'? Я рекомендую использовать 'WKWebView' для использования javascript-методов ПОСЛЕ загрузки представления. – Nishant

+0

Я использую UIWebView, спасибо за совет – CDDsw

+0

вы хотите вставить файл .js или вы хотите выполнить какой-либо код javascript? – jcesarmobile

ответ

5

Использование WKWebView для яваскрипта вызова метода:

Шаг 1. Класс импорта для WebKit

Obj-C: #import <WebKit/WebKit.h>
Swift: import WebKit

Шаг 2. Создать WKWebView экземпляр (к сожалению, это может быть сделано только programatical LY)

Obj-C @property (strong, nonatomic) WKWebView *wkWebView;

Свифта var wkWebView: WKWebView? = WKWebView()

Шаг 3. Затем в viewDidLoad

Obj-C:

WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; 

    NSString *scriptSourceCode = @"your javascript code here"; 
    WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]; 

    WKUserContentController *controller = [[WKUserContentController alloc] init]; 
    [controller addUserScript:script]; 

    configuration.userContentController = controller; 

    _wkWebView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:configuration]; 

    [self.view addSubview:_wkWebView]; 

Свифта:

let configuration = WKWebViewConfiguration() 
    let controller = WKUserContentController() 

    let scriptSourceCode = "your javascript code here" 
    let script = WKUserScript(source: scriptSourceCode, injectionTime: WKUserScriptInjectionTime.AtDocumentStart, forMainFrameOnly: true) 
    controller.addUserScript(script) 

    configuration.userContentController = controller 

    self.wkWebView = WKWebView(frame: self.view.frame, configuration: configuration) 

    self.view.addSubview(self.wkWebView!) 

Шаг 4 Загрузите HTML-строка (или loadRequest) в wkWebView:

Obj-C:

[_wkWebView loadHTMLString:_desiredHTML baseURL:[[NSBundle mainBundle] bundleURL]]; 

Свифта:

self.wkWebView?.loadHTMLString(_desiredHTML, baseURL: NSBundle.mainBundle().bundleURL) 

Шаг 5. Вызов метода, который существует в JavaScript включен в WKWebView

Obj-C:

NSString *callMethod = [NSString stringWithFormat:@"existingMethodWithParam(%@)", stringParam]; 

    [_wkWebView evaluateJavaScript:callMethod 
      completionHandler:^(id obj, NSError *error) { 

       if (error) 
       { 
        NSLog(@"ERROR evaluating JavaScript - %@", error); 
       } 
       else 
       { 
        NSLog(@"Returned value - %@", obj); //if the javascript method has a return type 
       } 
      }]; 

Swift:

let callMethod = String(format: "existingMethodWithParam(%@)", stringParam) 

    [self.wkWebView?.evaluateJavaScript(callMethod, completionHandler: { (obj, error) -> Void in 

     println(obj) 
     println(error) 
    })] 
+0

Спасибо, человек, но можете ли вы показать мне это быстро? – CDDsw

+0

Добавлен быстрый код. надеюсь, что он отвечает на вашу проблему .. – Nishant

+0

и где я должен вставить скрипт? здесь: «existingMethodWithParam (% @)»? – CDDsw

Смежные вопросы