UIWebView長按保存圖片js交互

demo地址:https://github.com/daijuqing/UIWebViewCopyImage

#import "ViewController.h"static NSString* const kTouchJavaScriptString=@"document.ontouchstart=function(event){\x=event.targetTouches[0].clientX;\y=event.targetTouches[0].clientY;\document.location=\"myweb:touch:start:\"+x+\":\"+y;};\document.ontouchmove=function(event){\x=event.targetTouches[0].clientX;\y=event.targetTouches[0].clientY;\document.location=\"myweb:touch:move:\"+x+\":\"+y;};\document.ontouchcancel=function(event){\document.location=\"myweb:touch:cancel\";};\document.ontouchend=function(event){\document.location=\"myweb:touch:end\";};";@interface ViewController (){

UIWebView *_webView;

NSTimer *_timer;

NSInteger _gesState;

NSString *_imgURL;

}

@end

@implementation ViewController

typedef NS_ENUM(NSInteger, GESTURE_STATE) { GESTURE_STATE_START, GESTURE_STATE_MOVE, GESTURE_STATE_END};

- (void)viewDidLoad {

[super viewDidLoad];

[self loadWebView];

}

- (void)loadWebView{

_webView = [[UIWebView alloc]initWithFrame:self.view.bounds];

[self.view addSubview:_webView];

_webView.delegate? =self;

NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"];

NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];

[_webView loadRequest:request];

}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)_request navigationType:(UIWebViewNavigationType)navigationType

{

NSString *requestString = [[_request URL] absoluteString];

NSArray *components = [requestString componentsSeparatedByString:@":"];

if ([components count] > 1 && [(NSString *)[components objectAtIndex:0] isEqualToString:@"myweb"])

{

if([(NSString *)[components objectAtIndex:1] isEqualToString:@"touch"])

{

if ([(NSString *)[components objectAtIndex:2] isEqualToString:@"start"])

{

/*

@需延時判斷是否響應(yīng)頁面內(nèi)的js...

*/

_gesState = GESTURE_STATE_START;

NSLog(@"touch start!");

float ptX = [[components objectAtIndex:3]floatValue];

float ptY = [[components objectAtIndex:4]floatValue];

NSLog(@"touch point (%f, %f)", ptX, ptY);

NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).tagName", ptX, ptY];

NSString * tagName = [_webView stringByEvaluatingJavaScriptFromString:js];

_imgURL = nil;

if ([tagName isEqualToString:@"IMG"])

{

_imgURL = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", ptX, ptY];

}

if (_imgURL)

{

_timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(handleLongTouch) userInfo:nil repeats:NO];

}

}

else if ([(NSString *)[components objectAtIndex:2] isEqualToString:@"move"])

{

//**如果touch動作是滑動名船,則取消hanleLongTouch動作**//

_gesState = GESTURE_STATE_MOVE;

NSLog(@"you are move");

}

}

else if ([(NSString*)[components objectAtIndex:2]isEqualToString:@"end"])

{

[_timer invalidate];

_timer = nil;

_gesState = GESTURE_STATE_END;

NSLog(@"touch end");

}

return NO;

}

return YES;

}

- (void)handleLongTouch {

NSLog(@"%@", _imgURL);

if (_imgURL && _gesState == GESTURE_STATE_START) {

UIActionSheet* sheet =[[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"保存圖片", nil];

sheet.cancelButtonIndex = sheet.numberOfButtons - 1;

[sheet showInView:[UIApplication sharedApplication].keyWindow];

}

}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

if (actionSheet.numberOfButtons - 1 == buttonIndex) {

return;

}

NSString* title = [actionSheet buttonTitleAtIndex:buttonIndex];

if ([title isEqualToString:@"保存圖片"]) {

if (_imgURL) {

NSLog(@"imgurl = %@", _imgURL);

}

NSString *urlToSave = [_webView stringByEvaluatingJavaScriptFromString:_imgURL];

NSLog(@"image url=%@", urlToSave);

NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlToSave]];

UIImage* image = [UIImage imageWithData:data];

UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

}

}

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo

{

if (error){

NSLog(@"Error");

//? ? ? ? [self showAlert:SNS_IMAGE_HINT_SAVE_FAILE];

}else {

NSLog(@"OK");

UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提醒" message:@"保存成功!" delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];

[alertView show];

}

}

-(void)webViewDidFinishLoad:(UIWebView *)webView {

[_webView stringByEvaluatingJavaScriptFromString:kTouchJavaScriptString];

}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末隘膘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子顽染,更是在濱河造成了極大的恐慌毛好,老刑警劉巖孽水,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陕贮,死亡現(xiàn)場離奇詭異典予,居然都是意外死亡甜滨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門瘤袖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衣摩,“玉大人,你說我怎么就攤上這事孽椰。” “怎么了凛篙?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵黍匾,是天一觀的道長。 經(jīng)常有香客問我呛梆,道長锐涯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任填物,我火速辦了婚禮纹腌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘滞磺。我一直安慰自己升薯,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布击困。 她就那樣靜靜地躺著涎劈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阅茶。 梳的紋絲不亂的頭發(fā)上蛛枚,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音脸哀,去河邊找鬼蹦浦。 笑死,一個胖子當(dāng)著我的面吹牛撞蜂,可吹牛的內(nèi)容都是我干的盲镶。 我是一名探鬼主播侥袜,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼徒河!你這毒婦竟也來了系馆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤顽照,失蹤者是張志新(化名)和其女友劉穎由蘑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體代兵,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡尼酿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了植影。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裳擎。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖思币,靈堂內(nèi)的尸體忽然破棺而出鹿响,到底是詐尸還是另有隱情,我是刑警寧澤谷饿,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布惶我,位于F島的核電站,受9級特大地震影響博投,放射性物質(zhì)發(fā)生泄漏绸贡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一毅哗、第九天 我趴在偏房一處隱蔽的房頂上張望听怕。 院中可真熱鬧,春花似錦虑绵、人聲如沸尿瞭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筷厘。三九已至,卻和暖如春宏所,著一層夾襖步出監(jiān)牢的瞬間酥艳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工爬骤, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留充石,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓霞玄,卻偏偏與公主長得像骤铃,于是被迫代替她去往敵國和親拉岁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容