oc与javascript怎么交互
2个回答
展开全部
Objective-C调用Javascript方法:
前提:
UIWebView已经完全加载完成包含需要调用的页面(注:在UIWebViewDelegate托管中通过监视- (void)webViewDidFinishLoad:(UIWebView *)webView调用来确定页面是否加载完成)。
方法:
假设某视图对象的子视图属性self.webview加载的页面包含如下Javascript函数:
function getString(){ return “Hello javascript!”;}
并且该函数在该页面上可被正常调用,则可以通过形如下面的Objectvie-C方法调用此函数:
NSString *str = [self.webview stringByEvaluatingJavaScriptFromString:@"getString();"];
该函数调用实际模拟了页面上的一次Javascript函数调用,因此在该函数内部任何有效的Javascript代码都可被执行!该Objective-C代码返回值为被调用的Javascript代码的返回值,在上例中,str的值将被赋为@”Hello javascript!”。
被调用的函数可以带有字符串或数值型的参数。若调用的Javascript函数名称带有参数,需保证传进去的参数的格式正确性,特别是字符串参数的引号很容易被忽略。
2. 系统响应页面Javascript代码:
前提:
需要实现UIWebViewDelegate的
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType;
托管函数(以下简称跳转监视函数)并将实现了该托管函数的对象设置为UIWebView的delegate。
方法:
UIWebView的当前页面将要被Javascript代码通过以下方式转向的时候,会调用上述跳转监视函数:
window.location.href=”http://www.strongsoft.net”;
此时实现了该托管协议的对象的跳转监视函数会被调用,通过如下代码监视浏览器跳转的地址:
NSString *url = [[request URL] absoluteString];
若该托管函数返回值为NO,则页面UIWebView的页面跳转将被否决。利用这一思路,监视页面上的特定格式的跳转地址加以拦截,并执行相应的本地代码,即可实现Javascript与Objective-C代码的交互。
例如,规定拦截URL地址前缀为”objc:”的所有地址,并且用if…else…语句判定本地需要执行的代码,则实现形如以下格式的Objective-C托管函数:
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
NSString *urlString = [[request URL] absoluteString];
NSArray *urlComps = [urlString componentsSeparatedByString:@":"];
if([urlComps count] && [[urlComps objectAtIndex:o] isEqualToString:@"objc"])
{
NSString *funcStr = [urlComps objectAtIndex:1];
if([funcStr isEqualToString:@"doFunc1"])
{
}
else if([funcStr isEqualToString:@"doFunc2"])
{
}
return NO;
}
return YES;
}
当需要调用本地函数1时,可以通过如下Javascript函数进行:
window.location.href=”objc:doFunc1”;
根据上述思路,可以完善通过Javascript调用本地带参数的Objective-C代码。
前提:
UIWebView已经完全加载完成包含需要调用的页面(注:在UIWebViewDelegate托管中通过监视- (void)webViewDidFinishLoad:(UIWebView *)webView调用来确定页面是否加载完成)。
方法:
假设某视图对象的子视图属性self.webview加载的页面包含如下Javascript函数:
function getString(){ return “Hello javascript!”;}
并且该函数在该页面上可被正常调用,则可以通过形如下面的Objectvie-C方法调用此函数:
NSString *str = [self.webview stringByEvaluatingJavaScriptFromString:@"getString();"];
该函数调用实际模拟了页面上的一次Javascript函数调用,因此在该函数内部任何有效的Javascript代码都可被执行!该Objective-C代码返回值为被调用的Javascript代码的返回值,在上例中,str的值将被赋为@”Hello javascript!”。
被调用的函数可以带有字符串或数值型的参数。若调用的Javascript函数名称带有参数,需保证传进去的参数的格式正确性,特别是字符串参数的引号很容易被忽略。
2. 系统响应页面Javascript代码:
前提:
需要实现UIWebViewDelegate的
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType;
托管函数(以下简称跳转监视函数)并将实现了该托管函数的对象设置为UIWebView的delegate。
方法:
UIWebView的当前页面将要被Javascript代码通过以下方式转向的时候,会调用上述跳转监视函数:
window.location.href=”http://www.strongsoft.net”;
此时实现了该托管协议的对象的跳转监视函数会被调用,通过如下代码监视浏览器跳转的地址:
NSString *url = [[request URL] absoluteString];
若该托管函数返回值为NO,则页面UIWebView的页面跳转将被否决。利用这一思路,监视页面上的特定格式的跳转地址加以拦截,并执行相应的本地代码,即可实现Javascript与Objective-C代码的交互。
例如,规定拦截URL地址前缀为”objc:”的所有地址,并且用if…else…语句判定本地需要执行的代码,则实现形如以下格式的Objective-C托管函数:
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
NSString *urlString = [[request URL] absoluteString];
NSArray *urlComps = [urlString componentsSeparatedByString:@":"];
if([urlComps count] && [[urlComps objectAtIndex:o] isEqualToString:@"objc"])
{
NSString *funcStr = [urlComps objectAtIndex:1];
if([funcStr isEqualToString:@"doFunc1"])
{
}
else if([funcStr isEqualToString:@"doFunc2"])
{
}
return NO;
}
return YES;
}
当需要调用本地函数1时,可以通过如下Javascript函数进行:
window.location.href=”objc:doFunc1”;
根据上述思路,可以完善通过Javascript调用本地带参数的Objective-C代码。
展开全部
package com;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.geojson.feature.FeatureJSON;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.opengis.feature.simple.SimpleFeature;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.MultiPolygon;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;
import wContour.Contour;
import wContour.Global.Border;
import wContour.Global.PointD;
import wContour.Global.PolyLine;
import wContour.Global.Polygon;
import wContour.Interpolate;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.nio.charset.Charset;
import java.util.*;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.geojson.feature.FeatureJSON;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.opengis.feature.simple.SimpleFeature;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.MultiPolygon;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;
import wContour.Contour;
import wContour.Global.Border;
import wContour.Global.PointD;
import wContour.Global.PolyLine;
import wContour.Global.Polygon;
import wContour.Interpolate;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.nio.charset.Charset;
import java.util.*;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询