2016-06-09 17 views
5

Javascript motorunu tarayıcıda nasıl belirleyeceğinizle ilgili birkaç soru var. Gergedan ve Nashorn'da çalışması gereken javascript kodu yazmalıyım.Hangi javascript altyapısının, gergedan veya nashorn kodumu çalıştırdığını nasıl belirleyebilirim?

Kodumun rhino veya nashorn üzerinde çalışıp çalışmadığını nasıl belirleyebilirim? Motoru belirleyebileceğiniz tipik fonksiyonlar, değişkenler, sabitler var mı?

+3

İlginç. Neden çeke ihtiyacın var? –

+0

Eğer rhino vs nashorn hakkında soru soruyorsanız, sadece JDK SE 8 vs> 8 hakkında soru sormuyor musunuz? –

+0

@JohnGreen: * "... JDK SE 8 vs> 8 hakkında?" * Nashorn, JDK8'e eklendi (> 8 değil). Ve [hala JDK8'de Rhino'yu çalıştırmak mümkün] (https://wiki.openjdk.java.net/display/Nashorn/Using+Rhino+JSR-223+engine+with+JDK8) (ama bir kavanoz eklemelisiniz) ve bunu amaca göre yapın). –

cevap

1

Rhino to Nashorn migration guide'a baktığımda, birkaç olası yol görüyorum.

Rhino uyumluluğu komut dosyası kullanmıyorsanız, bu yapacağını: (Uyumluluk komut dosyasını dahil sürece) importClass beri

var usingNashorn = typeof importClass !== "function"; 

... Rhino için değil Nashorn için tanımlanır.

benJava.type düşünüyorum yüzden, Nashorn özeldir: istisnalar sarılması için kontrol edebilir

var usingNashorn = typeof Java !== "undefined" && Java && typeof Java.type === "function"; 

:

var usingNashorn; 
try { 
    // Anything that will throw an NPE from the Java layer 
    java.lang.System.loadLibrary(null); 
} catch (e) { 
    // false! 
    usingNashorn = e instanceof java.lang.NullPointerException; 
} 

... taşıma kılavuzu o true olacağını söylüyor beri Nashorn için ama Rhino için false. Bu talihsiz bir istisna atmayı içerir.

+0

# 2 benim favorim. _Java_ üzerinde kontrol gerçekten bir Nashorn özelliğini test ediyor. Beklemiyorum, bu Rhino'ya eklenecek. – Christian13467

1

--no-java seçeneği ile, "Java", Nesne'de nesne olarak tanımlanmadı. Nashorn'da her zaman mevcut olan bir şeyi kontrol etmek en iyisi olurdu. DIR veya FILE değişkenleri gibi bir şey iyi bir adaydır. Her zaman nashornda var.

jjs> DIR typeof

dize

Eğer javax.script API (ve jjs) kullanıyorsanız, motor adını alabilir ve aynı zamanda kontrol edin:

import javax.script.*; 

public class Main { 
    public static void main(String[] args) throws Exception { 
    ScriptEngineManager m = new ScriptEngineManager(); 
    ScriptEngine e = m.getEngineByName("nashorn"); 
    System.out.println(e.getFactory().getEngineName()); 
    } 
} 

Nashorn ile, motor adı olarak "Oracle Nashorn" ı göreceksin.

+0

Bir java uygulamasında gömülü motoru kullanıyoruz. Uygulamadan derslere tam erişime sahip bir özelliktir. – Christian13467

+0

Tamam. Bu durumda, motor adını "Oracle Nashorn" olarak kontrol etmenizi tavsiye ederim. Bu ismin Nashorn için kararlı olması bekleniyor. –

İlgili konular