2016-03-21 1 views
0

У меня есть код JavaScript, который использует другой источник JavaScript:Попытка Вызов JavaScript код из Java

<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> 

Я хочу назвать этот код в Java. Как это сделать?

Я пытался использовать ScriptManager, но получил сообщение об ошибке, в котором говорилось:

окно не определен

+0

Предполагая, [что] (https://www.npmjs.com/package/node-vibrant) 's модуль: «[email protected] является Node.js порт Vibrant.js , который представляет собой порт javascript удивительного класса Palette в библиотеке поддержки Android ». Таким образом, использование оригинальной библиотеки кажется хорошей идеей (возможно, вам придется «disandroid») –

ответ

0

Это должно работать для вас.

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

Яркий сценарий используется из скрипта src. Без этого он будет вызывать ошибку – RJain

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