2013-02-24 41 views
1

好的,我正在为iPhone应用程序(仍在学习,了解Objective-C和Xcode),它会很好。我正在制作的应用程序已针对Android进行制作。应用程序正在为Android打开“硬编码”网页,这是我遇到问题的一部分。在该网页上的JavaScript有看起来像这样的代码的一部分:iOS WebView Javascript

<a onclick="Android.setCategory('US');" class="navigator_item cat_US">US</a> 

这是我很感兴趣的唯一的事情我只想得到那个“点击”一部分,例如一个字符串。所以,无论何时单击该部分,我都希望将其作为一个字符串,以便我可以在此之后执行自己的逻辑,调用某种方法或任何其他方法。我尝试使用

shouldStartLoadWithRequest 

但我无法注销任何点击。我在这里做错了什么?也许我对JavaScript知识的缺乏是问题,我不了解基础知识,但我认为应该有可能将这部分从onclick引号转换为字符串。这就是我需要的。

我忘了一件很重要的事情。我无法接触到用于Android的javaScript,这就是Android应用程序的工作原理。这就是为什么我想要做这个“串”的事情。

有什么我可以用stringByEvaluatingJavaScriptFromString和document.getElementsByClassName JavaScript方法做什么?

干杯PEPS :)

回答

2

如果你有自由更改onclick目标,你可以这样做:

<a onclick="setCategory('US');">US</a> 

在您的网页,然后为你的UIWebView做这样的事情:

[uiWebView stringByEvaluatingJavaScriptFromString: @"function setCategory(category) {alert("Category is " + category);};"]; 

如果您有设置类别时要执行的iOS逻辑,我使用的技术是自定义URL方案。例如,setCategory可能是:

setcategory://US/ 

您将您的JavaScript改为

[uiWebView stringByEvaluatingJavaScriptFromString: @"function setCategory(category) {window.location = 'setcategory://'+category+'/';};"]; 

,然后在shouldStartLoadWithRequest方法:

NSString* scheme = [[request URL]scheme]; 
    NSString* host = [[request URL]host]; // "host" is actually the category 

    if ([scheme isEqualToString:@"setcategory"]) { 
    // Do so logic to set the category 
    } 
+0

我真的很抱歉,同时我在想如何为了解释我需要什么,我忘了提及主要问题......我无法触及那个javaScript。它现在正在与Android一起工作,这是主要问题... 这就是为什么我想要将onclick“content”转换为字符串。就这样我可以在点击之间做出区别。这就是我想要检查什么是点击。 – jovanjovanovic 2013-02-24 19:54:22

+0

有一些技巧可以用Javascript的arguments.callee.name属性来获得你所使用的函数的名字,但是如果你不能触摸JavaScript,那么你就没有好处。这听起来像你要做的是实际解析你已经加载到你的UIWebView中的页面的DOM,并重写JavaScript,onclick is * going *尝试运行JavaScript,你不能拦截,然后决定要做其他事情,你将不得不在你的应用中提供可运行的JavaScript。 – Joe 2013-02-24 20:59:26

+0

有一个更简单的方法。使用'stringByEvaluatingJavaScriptFromString:'使WebView创建一个名为'Android'的Javascript对象,其值为'window.Android = {setCategory:function(){...},...};' – duskwuff 2013-02-24 21:16:01