0

現在、html ファイルを正常にロードする Web ビューがあります。これを行う方法は次のようになります。

- (EmailView *)loadHTMLIntoEmailView:(EmailView *)emailView
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"inlineAttachmentTemplate" ofType:@"html"];
    NSData *htmlData = [NSData dataWithContentsOfFile:path];
    NSString *resourceURL = [[NSBundle mainBundle] resourcePath];
    resourceURL = [resourceURL stringByReplacingOccurrencesOfString:@"/" withString:@"//"];
    resourceURL = [resourceURL stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
    NSURL *baseURL = [NSURL URLWithString:[NSString stringWithFormat:@"file:/%@//",resourceURL]];

    [emailView.webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:baseURL];
    return emailView;
 }

私が持っているhtmlファイルは次のようになります:

<!doctype html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <link rel="stylesheet" href="inlineAttachmentTemplateStyling.css">

<script>
function myFunction()
   {
    document.write("Hello from my html file!!!!");

   }
</script>      

</head>
<body id="body">
 <div id="container">
     <img id="testImage" src="fauxImageAttachment2.JPG" />
 </div><!-- #container -->
</body>
</html>

これは、画像が webview に表示されるという点で機能します。document.write を関数から取り出してスクリプト タグ内に直接配置すると、テキストが Web ビューに表示されます。ただし、Web ビューにテキストを表示できるようにする関数を (Objective C メソッドから) 呼び出す必要があり、最終的にはこの関数にいくつかの変数を渡す必要もあります。現時点では、javascript 関数を呼び出す方法さえわかりません。

この例を見ました。PhoneGap と iOS を使用して、(コールバックではなく) ネイティブ コードから JavaScript 関数を呼び出すことができますか? 、そして私の目的のCメソッドに次の行を追加しようとしました:

    [emailView.webView stringByEvaluatingJavaScriptFromString:@"myFunction()"];

しかし、これは関数を呼び出しません...または少なくともテキストはwebviewに表示されません。
私はかなり初心者のプログラマーであり、JavaScript についてはまったく知りません。誰かが私が間違っていることを強調できますか?

4

1 に答える 1

0

UIWebView に読み込んでいた html ドキュメント内で定義された JavaScript 関数を呼び出す方法が見つかりませんでした (これが可能か不可能かはわかりません)。しかし、別の html ファイルを使用するのではなく、目的の C コード内に直接作成された html 文字列を使用すれば、目標を達成できることがわかりました。HTML 文字列を作成した関数に変数を渡すことができ、HTML 文字列内で JavaScript を実行することもできました。

html文字列を作成するための私の方法は次のとおりです。

- (NSString *)htmlString:(NSString *)emailMessage {

    NSString *imageName = @"fauxImageAttachment2.JPG";

    NSString *string = [NSString stringWithFormat:@""
    "<!doctype html>"
    "<head>"
    "<meta charset='utf-8'>"
    "<meta name='viewport' content='width=device-width,initial-scale=1'>"
    "<link rel='stylesheet' href='inlineAttachmentTemplateStyling.css'>"
    "</head>"

    "<body id='body'>"
    "<div id='container'>"
    "<script type='text/javascript'>"
    "document.write('%@');"
    "</script>"
    "<img id='testImage' src='%@' />"
    "</div><!-- #container -->"
    "</body>"

    "</html>", emailMessage, imageName];

  return string;
}

そして、これをwebviewにロードする方法は次のとおりです。

- (EmailView *)loadHTMLIntoEmailView:(EmailView *)emailView
{
   NSString *sampleEmailMessage = @"Hey! Check out this awesome photo I sent you!!!!!";
   NSString *path = [[NSBundle mainBundle] bundlePath];
   NSURL *baseURL = [NSURL fileURLWithPath:path];
    [emailView.webView loadHTMLString:[self htmlString:sampleEmailMessage] baseURL:baseURL];

    return emailView;
}

これがこれを行うための最良の方法であるかどうかはわかりませんが、私の目的にはうまくいきました。

于 2013-08-29T17:31:02.627 に答える