问题标签 [jsni]

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.

0 投票
1 回答
955 浏览

gwt - 在 GWT 中借助 JSNI 使用 mozImageSmoothingEnabled

Gecko 1.9.2 为 canvas 元素引入了 mozImageSmoothingEnabled 属性;如果此布尔值为 false,则缩放时不会平滑图像。此属性默认为 true。

我想在 GWT 中使用这个属性。我该如何实施

通过使用 JSNI?

0 投票
1 回答
1486 浏览

java - GWT JSNI 调用小程序方法

我想将一个 Java 小程序添加到 GWT 页面并调用一些小程序的方法。这可以通过以下方式在 javascript 中实现:

但是,当我尝试在 GWT 中使用 JSNI 本机函数实现相同的想法时,它失败了。基本上它找不到小程序对象。这是 JSNI 代码:

注意 1:我知道“文档”不是 JSNI 使用的有效名称,您使用 $doc 代替(说明)。我不太清楚如何在 eval() 语句中对此进行编码,因此编译器将 $doc 替换为适当的引用,并且生成的 javascript 还包含用户指定的方法名称和参数。您可能知道,不能只混合输入 Java 变量和 Javascript(解释

注 2:以下 JavaScript 从 Web 浏览器地址栏运行

所以小程序就在页面上,在文档对象下,我可以从 Javascript 访问它。它只是不太适用于 JSNI。

注意 3:我通过继承 GWT 的 HTML 类将实际的小程序标签添加到面板中。沿着:

感谢您为这项工作提供任何帮助。

0 投票
3 回答
3243 浏览

javascript - 如何从 GWT 代码添加谷歌地图对象?

我想在我的 GWT 应用程序中使用谷歌地图。问题是 gwt-maps API 只支持 Google Maps API 第 2 版,而常规地图 api 是第 3 版。所以基本上我想做的是使用我的 GWT 代码中的标准 js 地图库,但这不工作:

我怀疑问题在于 onModuleLoad 不等同于 body.onload。你怎么看?

0 投票
2 回答
973 浏览

java - 在 Java 中存储 Javascript 对象

我有一个 Java 对象,其中存在一个由“知名文本”字符串定义的空间形状。在我的 GWT UI 中将鼠标悬停在这个对象上时,我的代码通过 JSNI 将此字符串传递给 Javascript,然后它会进行大量解析并创建适当的 Bing Maps API 形状。

一个简化的示例是地图应用程序,其中每个州作为一个对象存在,其中包含州名和定义其周界的字符串。在我的 UI 中将鼠标悬停在州名称上时,会解析周界字符串并在地图上绘制代表形状。

所以现在,每当用户将鼠标悬停在我的对象上时,我的代码都会进行传递、解析和创建。我正在寻找一种方法来解析字符串并只创建一次对象,希望将完整的、已经创建的 Javascript 对象(Bing Maps 形状)存储在原始 Java 对象本身中。我认为,这肯定会加快速度 - 当用户每次将鼠标移动到不同的项目时,它必须解析并创建几个非常详细的地图对象时,UI 开始显得迟钝。

是否可以将这种性质的 Javascript 对象存储在我的 Java 对象中,然后在需要时将它们带回 Javascript?

在我的 Java 代码 (GWT) 中,我可以创建一个 JavascriptObject,但这足以容纳 Microsoft.Maps.Polygon 对象之类的东西吗?

谢谢!

0 投票
1 回答
1255 浏览

java - 如何使用 Javascript 覆盖类型从 JSON 数组构建对象数组?

我的 JSON 响应是一个对象数组(例如文件夹)。我想使用 Javascript 覆盖类型生成一个文件夹对象数组。

我尝试了以下方法:

以及用法:

注意:文件夹应有扩展 JavaScriptObject。

我得到的错误是:

使用 JS Overlay 类型检索对象数组的正确方法是什么?

0 投票
2 回答
4592 浏览

javascript - 如何滚动到 GWT 中的 div id

我有一个带有 iframe 的网页,其中正在运行 gwt 应用程序。该网页有一个<div id="head">. 无法在 iframe 中滚动(有意),因此网页的高度例如为 1000 像素。在最底部有一个按钮,我希望当有人单击该按钮时(注意:该按钮位于 gwt 应用程序中),然后我想滚动到顶部。

这意味着 iframe 需要强制父窗口滚动到顶部。我用这样的 jsni 函数进行了尝试:

但这没有用。所以我的新想法是滚动到 div id "header"。有谁知道如何做到这一点?

我试过这样:

但这似乎不起作用(因为它应该采用 JSNI 方式?)。

感谢您的任何投入!

0 投票
1 回答
1286 浏览

javascript - 如何将 JavaScriptObject 结果添加到 SmartGWT 中生成的 HTML 的特定位置?

我需要从外部 javascript 库中执行 Javascript(我将其留在公用文件夹中,与客户端、服务器和共享文件夹处于同一级别)。我需要在 SmartGWT VLayout 中显示该 JavaScript(它是由 ChemDoodle javascript 库生成的 Canvas)的输出。起初我尝试将 javascript 代码添加到 HTMLFlow 对象,然后将 HTMLFlow 添加到 VLayout,但是 HTMLFlow 不会执行 Javascript 代码(如果我将生成的 HTML 复制粘贴到另一个浏览器窗口中,它可以工作)。我目前正在尝试使用 JSOHelper.eval("java script code here") 评估 JavaScript 代码,从而生成 JavaScriptObject。但是我不知道如何将 javascript 执行的结果“放置”在 VLayout 中。

但是,正如我所说,这不起作用,因为 HTMLFlow 不会执行 >script\> 块(布尔设置 setEvalScriptBlocks(true) 仅适用于从 HTMLFlow 调用的其他 URL)。因此,使用 JSOHelper 类,您可以执行以下操作:

我一直在试图弄清楚如何使用 JSNI 方法来做到这一点,但我不知道如何从那里(在 javascript 中)引用 vLayout。知道我们有 $doc 和 $win,但是从那里到 vLayout(在选项卡内,在其他小部件内),我不知道如何获取。我知道 javascript 中有一个 getElementByID 方法,但我不知道如何获取 vLayout 的 id,然后如何将该 DIV(我猜)与绘制的画布相关联,以便图像出现在那里。

谁能解释我如何管理(我想通过 JSNI 是唯一的方法)以使该 javascript 片段被执行并将结果(生成的画布)显示在我需要的地方?

谢谢!

0 投票
1 回答
411 浏览

javascript - 从手写 Javascript 调用 GWT 方法

我正在使用 GWT 构建一个 Web 应用程序,我希望让用户能够通过某种 Javascript API 来扩展其功能,该 API 将与用 GWT 编写的应用程序核心进行交互。基本上,这个 JS API 将映射到我的一些 GWT 内部方法,这些方法可以完成实际工作。

因此,为了实现这一点,我在 GWT JSNI 官方文档上阅读了一个技巧,该技巧包括从 GWT 创建一个全局 JS 变量并将其分配给实际 GWT 方法的调用。然后我会通过这个变量在我的手写 JS 代码中进行调用。

不幸的是,我无法使其工作(该示例包含语法错误,我不确定它是否已经过测试)。做更多的研究,我在这个网站上发现了一个类似的解决方案,它为 JS var 分配一个匿名函数来进行调用。它看起来像这样:

这个解决方案看起来很有希望,但我无法让它发挥作用。当我执行“window.showMessage();” 在我手写的 JS 代码中它不起作用。我发现了这些问题:

  • window.showMessage 似乎已创建,但 JS 控制台说它不是函数,即使我检查了 dom 树并验证变量确实包含函数。
  • 似乎我总是必须附加“窗口”。前缀,因为 var 是在 window 对象中创建的。这是一个相当令人担忧的问题,因为强迫用户每次想要调用函数时都这样写真的很乏味。

如果有人知道这些问题的解决方案(或实现我想要做的事情的替代方法),我将非常感激听到。提前致谢。

0 投票
1 回答
245 浏览

gwt - GWT 中的自定义插件事件

我们编写了一个浏览器插件。它触发像“mycustomevent”这样的自定义事件。我需要将这些自定义事件合并(即为其分配侦听器)到 GWT 中。这是我在 GWT 中的插件类。

这是我在视图中添加它的方式(我正在使用 gwtp)。它正在被添加并在页面中正常运行,我可以使用 JSNI 从 gwt 调用它的 js 函数。

我需要能够为插件触发的事件分配处理程序。我希望能够在我的演示者中执行以下操作,但到目前为止,我一直无法将其连接起来。

上面提到了一些额外的类。我定义了一个 MyCustomEvent 类,定义了扩展 EventHandler 的 MyCustomEventHandler 接口,以及定义了扩展 HasHandlers 的 HasMyCustomEventHandler 接口,但是在将它们全部连接起来之后,我什么也没得到。为简洁起见,我省略了它们,我很乐意添加任何可能有帮助的内容。

我可以在裸 js 中添加事件侦听器。

并每次都捕获事件(foo()被调用),所以我确信事件被触发了。

我已经尝试将以下内容添加到我的 PluginObject 类中,但这只是我从我发现的搜索内容中猜测的。它没有奏效。

这里的正确方法是什么?

0 投票
1 回答
814 浏览

java - 在 GWT 应用程序中捕获 ctr-z(undo) 和 ctr-y(redo)

我一直在编写一个基于 GWT 2.3 的 Web 应用程序,同时我还编写了自己的撤消和重做功能。当用户按下 ctr-z 或 ctr-y 时,撤消或重做最后的更改。他们是一种有效检测页面上任何地方发生的 ctr-z 和 ctr-y 按键事件并导致它们运行我自己的功能的方法。