LoginSignup
4
7

More than 3 years have passed since last update.

【Swift・Objective-C】UIWebView・WKWebViewでJavaScriptを実行する方法

Last updated at Posted at 2020-04-20

UIWebViewでのJavaScriptの実行

UIWebViewのViewに対してstringByEvaluatingJavaScriptという関数を実行する事で、引数に設定されているJavaScriptの関数が実行されます。

//Swift
uiWebView.stringByEvaluatingJavaScript(from: script)

//Objective-C
[self.uiWebView stringByEvaluatingJavaScriptFromString:script];

サンプルコード

例としてweb側のコードで定義された関数を実行する場合のサンプルコードを以下に記述します。
HTML + JavaScript(Web側のコード)

function sum(a, b) {
    return a + b;
}

iOS(ネイティブ側のコード)

//Swift
var jsScript = "sum(2,4)"

let result = uiWebView.stringByEvaluatingJavaScript(from: jsScript)

print(result)   // 6

//Objective-C
int jsScript;

jsScript = "sum(2,4)";

id result = [self.uiWebView stringByEvaluatingJavaScriptFromString:script];

printf(result); // 6

WKWebViewでのJavaScriptの実行

WKWebViewのViewに対してevaluateJavaScriptという関数を実行する事で、引数に設定されているJavaScriptの関数が実行されます。

//Swift
wkWebView.evaluateJavaScript(script) { (result, error) in

}

//Objective-C
[self.wkWebView evaluateJavaScript:script completionHandler:^(id _Nullable result, NSError * _Nullable error) {

}];

サンプルコード
例として先ほどとは違い表示したWebページのタイトルとURLを表示します。
SwiftとObjective-CどちらもTitleを取得するときはdocument.titleを、URLを取得するときはdocument.urlを実行します。

//Swift
let script = "document.title"

wkWebView.evaluateJavaScript(script) { (result, error) in

  var title = result
  print(title)  //表示したWebページのタイトル

}

//Objective-C
NSString *script = @"document.url";

[self.wkWebView evaluateJavaScript:script completionHandler:^(id _Nullable result, NSError * _Nullable error) {

  int url = result;
  printf(url) //表示したWebページのURL

}];

参考リンク
https://dev.classmethod.jp/references/ios-8-wkwebview-title-url/
http://nkimra.hatenablog.com/entry/2015/09/30/002419
https://www.techgaku.com/archives/54
https://studio.beatnix.co.jp/develop/swift/wkwebview-javascript/

4
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7