2009-08-19 3 views
0

Так что я хотел бы запустить следующий Javascript на открытой веб-странице в UIWebView:UIWebView и Javascript от кнопки

- (IBAction)pushDownoad { 
    [webView stringByEvaluatingJavaScriptFromString: 
    var myWin=window.open("","myWin","width=800,height=600,scrollbars,resizable,menubar"); 
    var myStr=document.documentElement.innerHTML.toLowerCase(); 
    myStr=myStr.replace(/\</g,"&lt;").replace(/\>/g,"&gt;").replace(/\r\n/g,"<br>"); 
    var a=myStr.lastIndexOf("embed src=")+11; 
    var b=myStr.lastIndexOf("ec_rate"); 
    myStr=myStr.substring(a,b);   
    myStr='<a href="'+myStr+'">Get Video</a>'; 
    myWin.document.open(); 
    myWin.document.write(myStr); 
    myWin.document.close();] 
} 

Весь смысл в этом Javascript должен искать текст между двумя фразами и вытаскивать этот текст из исходного кода. Если этот скрипт не используется, как бы я это сделал, чтобы Javascript просматривал текст между двумя конкретными фразами (который будет ссылкой), а затем открывает эту ссылку в текущем UIWebView.

Большое вам спасибо.

ответ

0

Хорошо, сначала вам не нужно открывать окно и писать на него (и, вероятно, это не сработает, window.open в UIWebViews, который использовался для отказа, хотя он работал в мобильном сафари). Вам просто нужно вернуть значение, оно будет автоматически отправлено в Objective C. Так что ваш JS должен выглядеть примерно так:

var myStr=document.documentElement.innerHTML.toLowerCase(); 
myStr=myStr.replace(/\</g,"&lt;").replace(/\>/g,"&gt;").replace(/\r\n/g,"<br>"); 
var a=myStr.lastIndexOf("embed src=")+11; 
var b=myStr.lastIndexOf("ec_rate"); 
myStr=myStr.substring(a,b);   
myStr='<a href="'+myStr+'">Get Video</a>'; 

//last statement will be returned 
myStr; 

Предполагая, что приведенный выше код действителен JS, который возвращает то, что вы хотите, когда вы испытываете что-то вроде FireBug, вы можете использовать его с stringByEvaluatingJavaScriptFromString: чтобы получить это значение в вашем приложении. Вы не можете просто прорезать и пропустить его, потому что вам нужно пройти в NSString. Это означает, что вам необходимо либо избежать его, или предпочтительно включать его в виде отдельного файла в ваших ресурсов, которые вы просто загрузить в Например:.

- (IBAction) pushDownoad { 
    NSError *error = nil; 
    NSString *jsFilePath = [[NSBundle mainBundle] pathForResource:@"stringFinder" ofType:@"js"]; 
    NSString *jsCode = [NSString stringWithContentsOfFile:jsFilePath encoding:NSUTF8StringEncoding error:&error]; 
    NSLog(@"link code: %@", [webView stringByEvaluatingJavaScriptFromString:jsCode]); 
} 

Очевидно, что вы должны проверить ошибки, и предположим, вы положили JS кода в файл с именем stringFinder.js в ресурсах вашего приложения. На этом этапе у вас есть ссылка, и вы можете делать то, что хотите, включая создание нового представления для его отображения.

Смежные вопросы