JavaScript для передачи строки в нативный объект-c

0

Я хочу передать строку из нажатия кнопки с html на ios native objective-c. Вот мой html с простым javascript:

<html>
    <head>
        <script language="javascript">
            function callVrama(vramaID) {
            window.location= "vramaWebShelves://vramaID/"+vramaID;
            }
            </script>
    </head>
    <body>
       <button onclick="callVrama('asdfqwer1234')">Try it</button>
    </body>
</html>

И это моя функция в UIWebViewDelegate:

- (void)viewDidLoad
{
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"content"
                                                  withExtension:@"html"];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    [super viewDidLoad];

    [_webShelves loadRequest:requestObj];
    _webShelves.delegate = self;
}
/// some other codes

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType {
    NSString *url = [[request URL] absoluteString];

    static NSString *urlPrefix = @"vramaWebShelves://vramaID/";

    if ([url hasPrefix:urlPrefix]) {
        NSString *vramaID = [url substringFromIndex:[urlPrefix length]];
        NSLog(@"VramasRequest: %@", vramaID);
        return NO;
    }
    else {
        return YES;
    }
}

Что, кажется, проблема?

Я действительно следую учебнику по этой ссылке, и все работает. Я просто не знаю, как изменить вызов js function нажав на кнопку uiwebview на кнопку. Вот от него javascript:

<script language="javascript">
            function resizeText(multiplier) {
                if (document.body.style.fontSize == "") {
                    document.body.style.fontSize = "1.0em";
                }
                document.body.style.fontSize =
                parseFloat(document.body.style.fontSize) +
                (multiplier * 0.2) + "em";
            }

            function touchStart(event) {
                sX = event.touches[0].clientX;
                sY = event.touches[0].clientY;
            }

            function touchEnd(event) {
                var parentNode = event.target.parentNode
                if ( parentNode != null && parentNode.nodeName.toLowerCase() == "a" )
                    return;

                if (event.changedTouches[0].clientX == sX &&
                    event.changedTouches[0].clientY == sY) {

                    window.location = "nativeAction://hideShow";
                }
            }

            document.addEventListener("touchstart", touchStart, false);
            document.addEventListener("touchend", touchEnd, false);

            </script>
  • 0
    в чем проблема? webView:shouldStartLoadWithRequest ли вызываться webView:shouldStartLoadWithRequest или параметры не анализируются?
  • 0
    webView:shouldStartLoadWithRequest не вызывать. Есть ли что-то еще, что мне нужно сделать с javascript ?

2 ответа

0

После перечитывания много раз и некоторые другие связанные тесты. Я выясняю, как заставить его работать. В objective c замените эту функцию:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType {

    if ([request.URL.scheme caseInsensitiveCompare:@"vramaWebShelves"] == NSOrderedSame) {
        NSString *url = [[request URL] absoluteString];
        static NSString *urlPrefix = @"vramaWebShelves://vramaID/";
        NSString *vramaID = [url substringFromIndex:[urlPrefix length]];
        NSLog(@"VramasRequest: %@",vramaID);
        return NO;
    }

    return YES;
}

caseInsensitiveCompare:@"vramaWebShelves" на caseInsensitiveCompare:@"vramaWebShelves", который не является caseInsensitiveCompare:@"vramaWebShelves://", который, как я полагал, является моим недостатком понимания с помощью функции.

И ничего плохого в моем javascript и html.

0

Я думаю, что проблема в этих двух строках:

[_webShelves loadRequest:requestObj];
_webShelves.delegate = self;

попробуйте установить delegate перед loadRequest

  • 0
    Я просто попробовал твой путь, безрезультатно.
  • 0
    где вы создаете _webShelves , не ноль? shouldStartLoadWithRequest должен вызываться хотя бы один раз при загрузке html контента.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню