2017-06-25 7 views
-2

J'ai un AppleScript que je suis essayant de convertir en JXA.
OBJECTIF: Obtenir la source HTML de la page WebComment j'utilise Objective-C (ObjC) avec JavaScript for Automation (JXA) pour obtenir le HTML de la page Web

Le AppleScript fonctionne très bien, mais le script JXA échoue avec cette erreur:
"TypeError: objet n'est pas une fonction"

Je cours Script Éditeur 2.8.1 (183.1) sur macOS 10.11.6.

J'ai étudié cette ref (et d'autres), mais il ne me aide pas: initWithData:encoding:

Toute aide/suggestions/références seront grandement appréciés.

Voici mes scripts:

//---- PURPOSE: GET HTML of Web Page ---- 
 

 
/* 
 
---- AppleScript VERSION ---- 
 
-- (runs fine in Script Editor with AppleScript as Language) 
 

 
    use framework "Foundation" 
 
    use scripting additions 
 

 
    set urlStr to "https://stackoverflow.com/" 
 
    
 
    set theURL to current application's class "NSURL"'s URLWithString:urlStr 
 
    set theData to current application's NSData's dataWithContentsOfURL:theURL 
 
    
 
    set theString to current application's NSString's alloc()'s initWithData:theData encoding:(current application's NSUTF8StringEncoding) 
 
    
 
    set theString to theString as text 
 
*/ 
 

 

 
//--- JXA VERSION --- 
 

 
var urlStr = "https://stackoverflow.com/"; 
 
var theURL = $.NSURL.URLWithString(urlStr); 
 
var theData = $.NSData.dataWithContentsOfURL(theURL); 
 

 
//-- NEXT statement FAILS WITH ERROR: "TypeError: Object is not a function" 
 

 
//--- AppleScript Code I'm trying to Convert --- 
 
//current application's NSString's alloc()'s initWithData:theData encoding:(current application's NSUTF8StringEncoding) 
 

 
var theString = $.NSString.alloc().initWithData(theData, 
 
    encoding($.NSUTF8StringEncoding) 
 
    ); 
 

 
var theString = ObjC.unwrap(theString);

+0

Pour ceux qui downvoted la question: Si vous voulez vraiment être utile, après un commentaire indiquant pourquoi vous avez refusé et comment vous pourriez l'améliorer. – JMichaelTX

Répondre

0

Merci à Executing an Arbitrary JavaScript File, je suis en mesure de résoudre ma propre question. La réponse est:

var theString = $.NSString.alloc.initWithDataEncoding(theData, $.NSUTF8StringEncoding); 

Voici le script JXA révisé, qui fonctionne:

//--- JXA VERSION --- 
 

 
ObjC.import('Foundation'); // is this necessary? 
 

 
var urlStr = "https://stackoverflow.com/"; 
 
var theURL = $.NSURL.URLWithString(urlStr); 
 
var theData = $.NSData.dataWithContentsOfURL(theURL); 
 

 
//--- THIS IS THE FIX --- 
 
var theString = $.NSString.alloc.initWithDataEncoding(theData, $.NSUTF8StringEncoding); 
 

 
var theString = ObjC.unwrap(theString); 
 
theString.substring(1,100) 
 

 
//--->"!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n\r\n<title>Stack Overflow</title>\r\n <link rel=\"shortcut icon\" hr"