Я хочу передать строку из нажатия кнопки с 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>
После перечитывания много раз и некоторые другие связанные тесты. Я выясняю, как заставить его работать. В 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
.
Я думаю, что проблема в этих двух строках:
[_webShelves loadRequest:requestObj];
_webShelves.delegate = self;
попробуйте установить delegate
перед loadRequest
_webShelves
, не ноль? shouldStartLoadWithRequest должен вызываться хотя бы один раз при загрузке html контента.
webView:shouldStartLoadWithRequest
ли вызыватьсяwebView:shouldStartLoadWithRequest
или параметры не анализируются?webView:shouldStartLoadWithRequest
не вызывать. Есть ли что-то еще, что мне нужно сделать сjavascript
?