2017-05-02 6 views
0

本文にJavaScript関数を呼び出した後に生成されるHTMLファイルがあります。 HTMLからJavaScript呼び出しを削除し、webView代理人を使用してSwiftから呼び出す必要があります。私はstringByevaluatingJavaScriptを使ってみましたが、うまくいきません。私はそれにJavaScript関数を持っているHTMLファイルを追加しています。Swift webViewを使用して本文にHTML文字列を返すJavaScript関数を呼び出す方法はありますか?

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <title>Complete Blood Count</title> 
 
    <link href="https://www.fontify.me/wf/4dae5b9279578bbce15473cde2ae897f" rel="stylesheet" type="text/css"> 
 
    <style type="text/css"> 
 
    body { 
 
     font-family: "font92727"; 
 
    } 
 
    .main-box { 
 
     width: 96%; 
 
     display: inline-block; 
 
     margin: 0 auto; 
 
     padding: 0; 
 
     position: absolute; 
 
     font-size: 3em; 
 
    } 
 

 
    .image-box { 
 
     display: inline-block; 
 
    } 
 

 
    .image-box img { 
 
     width: 100%; 
 
     height: inherit; 
 
     display: inline-block; 
 
    } 
 

 
    .value-box { 
 
    } 
 

 
    .value-inner-box.wbc { 
 
     position: absolute; 
 
     left: 12%; 
 
     top: 37%; 
 
     text-align: center; 
 
    } 
 

 
    .value-inner-box.hbc { 
 
     position: absolute; 
 
     left: 46%; 
 
     top: 15%; 
 
     text-align: center; 
 
    } 
 

 
    .value-inner-box.hct { 
 
     position: absolute; 
 
     left: 46%; 
 
     top: 60%; 
 
     text-align: center; 
 
    } 
 

 
    .value-inner-box.plt { 
 
     position: absolute; 
 
     left: 82%; 
 
     top: 37%; 
 
     text-align: center; 
 
    } 
 

 
    @media screen and (max-width: 1920px) and (min-width: 1025px), (min-width: 2048px) { 
 
     .main-box { 
 
      font-size: 6em; 
 
     } 
 
    } 
 
    </style> 
 
</head> 
 
<body> 
 
<script type="text/javascript"> 
 
    
 
    document.write(cbc({ wbc: 14.0, wbcCol:'red', hgb: 12.0, hbcCol:'orange', hct: 12.0, hctCol: 'blue', plt: 12.4, pltCol: 'green'})); 
 

 
    function cbc(cbcdata) { 
 
     var output = ""; 
 
     
 
     var wbc0 = cbcdata.wbc; 
 
     var hgb0 = cbcdata.hgb; 
 
     var hct0 = cbcdata.hct; 
 
     var hct0 = cbcdata.plt; 
 

 
     var wbcC0 = cbcdata.wbcCol; 
 
     var hbcC0 = cbcdata.hbcCol; 
 
     var hctC0 = cbcdata.hctCol; 
 
     var pltC0 = cbcdata.pltCol; 
 

 

 
     output = output + "<div class='main-box'>"; 
 
     output = output + "<div class='image-box'>"; 
 
     output = output + "<img src='cbc2x.png'>"; 
 
     output = output + "</div>"; 
 
     output = output + "<div class='value-box'>"; 
 
     output = output + "<div class='value-inner-box wbc'>"; 
 
     output = output + "<div class='vale-labellabel' style ='color:"+wbcC0+"'>WBC</div>"; 
 
     output = output + "<div class='value-text' style ='color:"+wbcC0+"'>" + wbc0 +"</div>"; 
 
     output = output + "</div>"; 
 
     output = output + "<div class='value-inner-box hbc'>"; 
 
     output = output + "<div class='vale-labellabel' style ='color:"+hbcC0+"'>HBC</div>"; 
 
     output = output + "<div class='value-text' style ='color:"+hbcC0+"'>" + hgb0 +"</div>"; 
 
     output = output + "</div>"; 
 
     output = output + "<div class='value-inner-box hct'>"; 
 
     output = output + "<div class='vale-labellabel' style ='color:"+hctC0+"'>HCT</div>"; 
 
     output = output + "<div class='value-text' style ='color:"+hctC0+"'>" + hct0 +"</div>"; 
 
     output = output + "</div>"; 
 
     output = output + "<div class='value-inner-box plt'>"; 
 
     output = output + "<div class='vale-labellabel' style ='color:"+pltC0+"'>PLT</div>"; 
 
     output = output + "<div class='value-text' style ='color:"+pltC0+"'>" + hct0 +"</div>"; 
 
     output = output + "</div>"; 
 
     output = output + "</div>"; 
 

 
     return output; 
 
    } 
 

 
</script> 
 

 

 
</body> 
 
</html>

func webViewDidFinishLoad(webView: UIWebView) { 
 
     
 
     if((javaScriptCalledDict.objectForKey(dataSourceArray![webView.tag] as! String) as! Bool) == false){ 
 
      let jsString = String(format:"cbc({ wbc: 14.0, wbcCol:'red', hgb: 12.0, hbcCol:'orange', hct: 12.0, hctCol: 'blue', plt: 12.4, pltCol: 'green'})") 
 
      webView.stringByEvaluatingJavaScriptFromString(jsString)! 
 
      javaScriptCalledDict.setObject(true, forKey: dataSourceArray![webView.tag] as! String) 
 
     } 
 
     
 
     
 
    }

これは、JS関数に渡された固定値でレンダリングされたHTMLです。私は引数のセットでJS関数を呼び出す必要があります。誰でもHTMLやスウィフトコードの変更を提案することができます。

+0

:文字列と数値

function cbc(wbc, wbcCol, hgb, hbcCol, hct, hctCol, plt, pltCol){} 

を受け入れるように関数のシグネチャを変更する必要があることになってしまうでしょう。ロードされたら、stringByEvaluatingJavaScriptFromString(HTMLFunction)のhtml関数名を渡してください –

+0

すべてうまくいきました。 JS関数が呼び出されてHTMLを返したが、HTMLで使用されていなかった。私は、生成されたHTML出力をbody内のdivに代入するようにJS関数を変更しました。divId.innerHTML = JS関数の出力。仕事をした。 –

答えて

0

あなただけ変更する必要があります:

let htmlReturned = webView.stringByEvaluatingJavaScriptFromString(jsString)! 

ここjsStringはあなたのJavaScript関数の名前に等しくなります。しかし、このWebViewの問題は、iOSコードのオブジェクト値をjavascript関数に渡すことができないことです(私が知っている限り、間違っていると私を証明してください:))....まず、あなたのWebViewでの要求としてあなたのHTMLファイルをロード

let htmlReturn = webview.stringByEvaluatingJavascriptFromString("cbc(14, \"red\", 12, \"orange\", 12, \"blue\", 12.4, \"green\")") 
+0

私はすでに同じことをやっています。 JS出力はHTMLファイルで使用されていませんでした。それは体の内側のhtmlとして割り当てられる必要がありました。しかし、ありがとう。 –

関連する問題