当前位置: 首页 > 面试题库 >

使用UIWebView从HTML代码中调用目标C代码中的方法

洪鸿
2023-03-14
问题内容

我的iOS应用程序中有.html文件。HTML文件具有少量带有onClick方法的div块。当我点击这些块时,我会在Web视图中调用一些javascript代码,但我还需要在源代码中了解这些事件。

例如,当我点击Web元素并调用onClick时,我需要在代码中调用某些方法,例如 - (void)didTouchedWebElementWithId

我可以做这个东西吗?谢谢。


问题答案:

在JS中调用Objective-C的方法:

下面的网址有助于做到这一点

无法执行,我们通过导航到其他页面来解决,在导航期间,Webview委托将监视导航的前缀并执行我们指定的方法。

sample.html

<html>
    <head>
        <script type='text/javascript'>
            function getText()
            {
                return document.getElementById('txtinput').value;
            }
            function locationChange()
            {
                window.location = 'ios:webToNativeCall';
            }
        </script>
    </head>
    <body style='overflow-x:hidden;overflow-y:hidden;'>
        <h2 style = "font-size:16px;" align='center'>Hi Welcome to Webpage</h2>
        <br/>
        <p align='center' style = "font-size:12px;">Please Click the button after entering the text</p>
        <br/>
        <center>
            <input type='text' style='width:90px;height:30px;' id='txtinput'/>
        </center>
        <br/>
        <center>
            <input type='button' style='width:90px;height:30px;' onclick='locationChange()' value='click me'>
        </center>
    </body>
</html>

Objective-C代码

当您单击html页面中的按钮时,以下委托将被触发并取消导航,因为我们返回NO且调用了相应的方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if ([[[request URL] absoluteString] hasPrefix:@"ios:"]) {

        // Call the given selector
        [self performSelector:@selector(webToNativeCall)];        
        // Cancel the location change
        return NO;
    }
    return YES;
}

- (void)webToNativeCall
{
    NSString *returnvalue =  [self.webviewForHtml stringByEvaluatingJavaScriptFromString:@"getText()"];

    self.valueFromBrowser.text = [NSString stringWithFormat:@"From browser : %@", returnvalue ];
}


 类似资料:
  • 问题内容: 有没有人能将C#代码集成到Java应用程序中呢? 代码很小,所以我可以用Java重写,但是如果可能的话,我宁愿重用代码。不要重复自己,等等。 另外,我知道我可以将C#公开为Web服务或其他任何东西,但是其中包含一些安全性/加密功能,因此,我宁愿将其紧密集成。 编辑:它将在基于服务器的应用程序上,因此“下载”另一个运行时是无关紧要的。 问题答案: 有一个IL到Java字节码编译器Gras

  • gcc-g-i/usr/lib/jvm/java-1.6.0-openJDK-1.6.0.0.x86_64/include/-i/usr/lib/jvm/java-1.6.0-openJDK-1.6.0.0.x86_64/include/-i/usr/lib/jvm/java-1.6.0-openJDK-1.6.0.0.x86_64/include/-i/usr/lib/jvm/java-1.6.

  • 问题内容: 我有一个C函数,我想从C 调用。我无法使用“ ”这样的方法,因为C函数无法使用g 进行编译。但是使用gcc可以很好地编译。有什么想法如何从C ++调用函数吗? 问题答案: 像这样编译C代码: 然后是这样的C ++代码: 然后使用C ++链接器将它们链接在一起: 当您包含C函数的声明时,还必须告诉C ++编译器C头即将到来。因此开始于: 应该包含以下内容: (在此示例中,我使用了gcc,

  • 问题 你想在C中安全的执行某个Python调用并返回结果给C。 例如,你想在C语言中使用某个Python函数作为一个回调。 解决方案 在C语言中调用Python非常简单,不过设计到一些小窍门。 下面的C代码告诉你怎样安全的调用: #include <Python.h> /* Execute func(x,y) in the Python interpreter. The argument

  • 问题内容: 如果可以的话,如何在Wicket的JavaScript代码中调用Java代码(例如方法)。 问题答案: 呃 正确的答案应该是ajax回调。您可以手动将js编码为挂钩到wicket js,也可以在java中通过wicket组件设置回调。例如,从AjaxLazyLoadPanel中: 本示例说明如何将回调代码添加到Wicket中的任何组件。在浏览器中触发OnDomReady事件后,加载页面

  • 问题内容: 我尝试将Python脚本嵌入到我的C 程序中。在阅读了有关嵌入和扩展的一些知识之后,我了解了如何打开自己的python脚本以及如何向其传递一些整数。但是现在我有点不了解如何解决我的问题。我必须做这两个事情,从C 调用Python函数,并从我的嵌入式Python脚本调用C 函数。但是我不知道该从哪里开始。我知道我必须编译一个.so文件以将我的C 函数暴露给Python,但是我无能为力,因