問題タブ [rhino]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - サーバーでリモート JavaScript を実行したい
私は検索を行って、Rhino と Jaxer が可能な解決策であると思いつきましたが、それらが私が求めているものであるかどうかわからないので、とにかくそこに質問を出したいと思いました (特に私がたとえば、runat="server" を追加することはできません)。
そのため、サーバーからサードパーティのサイトのリモートページを呼び出し、javascript を実行したいと考えています。
CUrL を使用すると、ページ、コンテンツ、POST などを簡単に取得できますが、JavaScript を実行することはできません。
ブラウザーで URL を呼び出す .NET アプリケーションの構築から上記 (Rhino と Jaxer) までの解決策を提案してきましたが、以前にこれを経験したことがある人がいるかどうかを確認したいと考えていました。そして、どのように問題を解決しましたか。
乾杯、
マイク
javascript - オブジェクト内から呼び出されたときに「eval」を使用してトップレベル関数を定義する際の問題
オブジェクト内にカプセル化されたインタラクティブな read-eval-print-loop を (JavaScript で) 作成しました。しかし、私は最近、インタープリターに指定されたトップレベルの関数定義がインタープリターによって「記憶」されていないように見えることに気付きました。いくつかの診断作業の後、コアの問題を次のように減らしました。
この時点で、次の 2 つのステートメントが期待どおりに機能することを期待しています。
t1
代わりに得られるのは、行の期待値であり、行はバインドされていないt2
エラーで失敗します。t2
IOW: このスクリプトを実行した後、 の定義があり、 の定義がt1
ありませんt2
。内部から eval を呼び出す行為はevaler
、グローバル定義が記録されないトップレベルの呼び出しとは十分に異なります。何が起こるかというと、への呼び出しが関数オブジェクトを
返すということです。そのため、それが定義され、アクセスできない他のバインディングのセットに格納されているとevaler.eval
推測しています。t2
( ではメンバーとして定義されていませんevaler
。)
これに対する簡単な修正はありますか?私はあらゆる種類の修正を試みましたが、機能するものに出くわしませんでした。(私が行ったことのほとんどは、 eval への呼び出しを無名関数に入れ、その呼び出し方法を変更したり、チェーン化したりすることに集中しています__parent__
。)
これを修正する方法について何か考えはありますか?
もう少し調べた結果が以下です。
tl;dr: インスタンスでメソッドを呼び出すと、Rhino は中間スコープをスコープ チェーンに追加します。t2
はこの中間スコープで定義されており、すぐに破棄されます。@マット:あなたの「ハッキーな」アプローチは、これを解決する最良の方法かもしれません。
私はまだ根本的な原因についていくつかの作業を行っていますが、jdb で質の高い時間を過ごしたおかげで、何が起こっているのかをより理解できるようになりました。すでに説明したように、関数ステートメント likefunction t1() { return 42; }
は 2 つのことを行います。
- 式で得られるように、関数オブジェクトの匿名インスタンスを作成します
function() { return 42; }
- その無名関数を現在の最上位のスコープに名前 でバインドします
t1
。
eval
私の最初の質問は、オブジェクトのメソッド内から呼び出したときに、これらの 2 番目のことが発生しない理由についてです。
Rhino でバインディングを実際に実行するコードは、関数内にあるようorg.mozilla.javascript.ScriptRuntime.initFunction
です。
上記のt1
場合、scope
私がトップレベルのスコープに設定したものです。これは、トップレベル関数を定義したい場所なので、これは予想される結果です:
ただし、このt2
場合scope
は、まったく別のものです。
NativeCall
そして、これは私の予想されるトップレベルのスコープであるこれの親スコープです:
これは、上でこれを書いたときに私が恐れていたことです。 ' のインスタンスであることが判明しましたNativeCall
...関数が作成され、 内の変数にt2
バインドされ、 への呼び出しが戻ると は消えます。t2
NativeCall
NativeCall
evaler.eval
そして、これは物事が少しあいまいになるところです...私が望むほど多くの分析を行っていませんが、私の現在の作業理論は、NativeCall
スコープが必要であるということです。(スタックフレームを少しバックアップすると、関数が「アクティブ化が必要」でゼロ以外の関数型を持つまでにスコープチェーンに追加されます。これらのことは単純な関数呼び出しにのみ当てはまると想定していますが、確かに知るのに十分な上流をたどっていない. 多分明日.)this
evaler
evaler.eval
NativeCall
Interpreter.initFrame
java - Rhino がこの JavaScript に満足していないのはなぜですか?
いくつかのブラウザーでANTLR javascript ターゲットの javascript ライブラリを使用してコードを正常に使用していますが、サーバーで Rhino を使用したいのですが、問題が発生しています。Rhino 1.7R2 リリースの js-14.jar ファイルを参照する単純な Java コードがいくつかあります。
EcmaError
これは、次のメッセージで失敗します。
それが参照しているJavaScript行は次のとおりです。
これorg.antlr.namespace
は、ファイルの前の方で関数として宣言されているため、これについてどう考えればよいかわかりません。また、「名前空間」がJavaScriptまたは特にRhinoの予約語であることもわかりません。
org.antlr.namespace
56行目の宣言は次のとおりです。
ANTLR javascriptのターゲット ページには、Rhino はテスト済みのプラットフォームであると記載されているため、Rhino を悪用している可能性があると考えています。誰にもヒントはありますか?
c# - Rhino モックは、プライベート メソッドがパブリック メソッドから呼び出されていることを確認します
私はこれを理解しようとしています.privateメソッドが、テストしているクラスでrhinoモックを使用して呼び出されることをテストするにはどうすればよいですか。したがって、私のクラスは次のようになります。
私の単体テストはクラス Foo とメソッド DoSomething() にあります。rhino モックを使用して、somevalue が false の場合、特定のメッセージが ReportFailure に渡されることを確認します。
java - Rhino、複数のjavascriptファイルからコードを追加
Rhinoを使用してJavaアプリケーションにJavaScriptを埋め込んでいます。Rhino Webサイトの例に従って、ContextのevaluateStringメソッドを呼び出してスクリプトを実行し、実際のスクリプトを文字列として渡します。
利用したい既存のJavaScriptコードがたくさんあります。すべてを巨大な文字列に連結してevaluateStringに渡したくありません。むしろ、evaluateStringに渡すコードからコードを呼び出せるようにコードをロードできるようにしたいと思います(MicrosoftのスクリプトコントロールでAddCodeメソッドが機能するようなものです)。ScriptableObject.putPropertyメソッドを使用して現在変数を追加できるようなコードを追加したいと思います。
これを行う方法はありますか?誰かがコードスニペットまたはドキュメントへのリンクを提供できますか?ありがとう!
java - Scripting java : スクリプト ファイルでクラスを作成する
スクリプト ファイル (javax.script) で Java クラスを作成したいと考えています。助けてください
javascript - Rhino で「本物の」JavaScript 配列を作成する方法
わかりました、私は少し困惑しています。私はおそらく露骨に明らかな何かを見逃していますが、どうやら私は木のために森を見ることができないようです:
パラメータが配列であることを期待する JavaScript 関数を呼び出そうとしていますif (arg instanceof Array)...
。
そして悲しいかな、result
ですfalse
。
ここで何が欠けていますか?
編集:
もう少し情報:期待どおり両方[] instanceof Array
とnew Array() instanceof Array
戻ります。true
要素を配列に追加すると、JavaScript コードに正しいインデックス (ゼロから始まる数値) で表示されます。
この JavaScript 関数を使用して出力する場合:
結果は次のとおりです。
それでうまくいきます。「本当の」配列が欲しいことを除いて:)
java - Scripting java : 外部ファイルからクラスをインポートする
たとえば、外部フォルダーに既に記述しているクラスをインポートしExample.java
たいc:\class\Example.java
:
また
これは ScriptEngine rhino のスクリプトにあります。
どうすればそれができますか???
soap - Rhino で実行されているスクリプトの E4X オブジェクトから Apache Axiom 要素を作成するにはどうすればよいですか?
次のような E4X オブジェクトを作成するスクリプトを Rhino で実行しています。
このような XML を SOAP メッセージに含めたいと考えています。SOAP メッセージの作成にApache Axis 2 ServiceClientを使用しています。私が探しているのは、E4X xml オブジェクトを Apache AXIOM 要素に変換して、次の呼び出しを介して SOAP メッセージに追加できるようにする方法です。
ServiceClient.addHeader(org.apache.axiom.om.OMElement omElement)
java - EclipseでRhinoプロジェクトを実行可能なJARとしてビルドするにはどうすればよいですか?
いくつかの.jsファイルを作成したRhinoプロジェクトがあり、Eclipseからorg.mozilla.javascript.tools.shell.Main
.jsファイルの1つへのパラメーターを指定してプログラムを開始します"src/bot.js"
。さて、これを私のサーバーで実行するために、簡単にデプロイできるように単一の実行可能なJARにビルドできるようにしたいと思います。これを行うにはどうすればよいですか、それともまったく異なるアプローチをとる必要がありますか?