2016-03-21 6 views
0

ich JavaScript-Code haben, die eine andere JavaScript Quelle verwendet:JavaScript-Code von Java aufrufen Der Versuch

<body> 
    <script src="node_modules/node-vibrant/dist/vibrant.js"></script> 

    <script type="text/javascript"> 
    function test(src) { 
     Vibrant.from(src).getPalette(function(err, swatches) { 
     if (err) throw err; 
     for (var key in swatches) { 
      if (key === "Vibrant") { 
      var swatch = swatches[key]; 
      if (swatch) { 
       console.log("hex: " + swatch.getHex()); 
       return (swatch.getHex()); 
      } 
      } 
     } 
     }); 
    } 

    test("Apples.jpg"); 
    </script> 
</body> 

ich diesen Code in Java anrufen möchten. Wie geht das?

ich versuchte, die ScriptManager zu verwenden, aber einen Fehler bekam die sagte:

Fenster in nicht

+0

Unter der Annahme, [die] (https://www.npmjs.com/package/node-vibrant) s das Modul: „[email protected] ist ein node.js Hafen Vibrant.js Dies ist ein JavaScript-Port der tollen Palette-Klasse in der Android-Support-Bibliothek. " Also die Verwendung der Original-Bibliothek scheint eine gute Idee (Sie müssen möglicherweise "Disandroid") –

Antwort

0

definiert Dies sollte für Sie arbeiten.

ScriptEngineManager manager = new ScriptEngineManager(); 
      ScriptEngine engine = manager.getEngineByName("JavaScript"); 

      // JavaScript code in a String 
      String script = " function test(src) { Vibrant.from(src).getPalette(function(err, swatches) {  if (err) throw err;   for (var key in swatches) { if(key==='Vibrant'){   var swatch = swatches[key];   if (swatch) {  console.log('hex: ' + swatch.getHex());   return(swatch.getHex());    }}  }  }); }"; 
      // evaluate script 
      engine.eval(script); 


      Invocable inv = (Invocable) engine; 

      // invoke the global function named "hello" 
      inv.invokeFunction("test", "Apples.jpg"); 
+0

Vibrant im Skript wird aus dem Skript src verwendet. Ohne das wird es Fehler werfen – RJain