javascript将字符串传递给本机objective-c
Posted
技术标签:
【中文标题】javascript将字符串传递给本机objective-c【英文标题】:javascript to pass string to native objective-c 【发布时间】:2014-04-08 09:24:55 【问题描述】:我想将按钮单击中的字符串从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;
似乎有什么问题?
我实际上是按照link 中的教程进行操作的,一切正常。我只是不确定如何将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>
【问题讨论】:
什么问题?webView:shouldStartLoadWithRequest
未调用或未解析参数?
webView:shouldStartLoadWithRequest
不打电话。我还需要处理javascript
的其他事情吗?
【参考方案1】:
我认为这两行有问题:
[_webShelves loadRequest:requestObj];
_webShelves.delegate = self;
请尝试在loadRequest
之前设置delegate
【讨论】:
你在哪里创建_webShelves
,是不是零?加载内容 html 时,应该至少调用一次 shouldStartLoadWithRequest。
我用另一个html(具有不同的js函数)测试它可以工作,这意味着不是ios部分,而是js中缺少一些东西。
也许你应该设置window.location.href
也试过了。还是没有结果。【参考方案2】:
经过多次重读和一些其他相关测试。我想知道如何让它工作。在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://"
,我认为是我对函数缺乏了解。
而且,我的 javascript
和 html
没有问题。
【讨论】:
以上是关于javascript将字符串传递给本机objective-c的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 将 Uint8List 传递给 iOS Objective-c
将 Dictionary<string, object> 传递给 MVC 控制器
如何通过 FromQuery 参数将“System.Object”类型传递给控制器