- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在拼命地尝试创建一个 Anno JSNI 方法中的对象,但我有一个奇怪的问题:jsni 方法中的代码不起作用,但如果我在浏览器控制台中执行相同的操作,它就可以正常工作。
Java 部分
我正在使用 JSONArray
,我在其中添加了一些 JSONObject
(根据 Anno 文档,包含所有元素)。这是我的 JSNI 方法:
// I'm using the getJavaScriptObject() on my JSONArray
private static native void launch( JavaScriptObject steps )/*-{
var anno = new $wnd.Anno(steps);
anno.chainIndex().show();
}-*/;
浏览器部分
需要说明的是,该方法是在 onShow
事件上调用的,因此所有资源都已加载并呈现。因此,当显示元素并调用函数时,我的控制台中出现此错误:
Couldn't find Anno.target 'h1'. --- anno.js:265
注意:在 Anno.js 中,h1 是 target 的默认值。
但我的步骤值是正确的,当我在控制台中执行相同的命令时它起作用了:
var testAnno = new Anno([{
content: "namespinnerFrequencyA",
position: "center-right",
target: ".dataAuto0"
},{
content: "chooseFrequencyB",
position: "top",
target: ".dataAuto1"}]);
testAnno.show();
我不明白为什么它在一种情况下有效而在另一种情况下无效。我也尝试过使用 JSON.stringify
然后使用 JSON.parse
但它也不起作用。
编辑:
我想通了。在调试 anno.js 时,我想到了一些事情:当我在控制台中初始化 Anno 时,本地范围看起来像这样(大图 here):
但是当我使用 jsni 方法时,本地范围完全不同,我的参数存储为实际数组而不是正常处理(大图 here ):
最佳答案
问题在于 GWT 代码在 iframe 中运行(用于沙盒/隔离),而 Anno 仅支持来自相同浏览上下文的数组类型。
参见 http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/和 http://web.mit.edu/jwalden/www/isArray.html问题的描述。
ECMAScript 5.1 添加了一个 Array.isArray()
函数来解决该问题并具有广泛的浏览器支持(支持 IE9):https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
jQuery 也有一个,这让我无法理解 Anno 不使用它而不是使用损坏的 if arg.__proto__ is Array.prototype
(除非它是设计使然)。所以首先要做的事情是:在 Anno 上提交问题。
作为解决方法,应该可以使用 $wnd.Array.apply($wnd.Array, steps)
从顶部窗口将数组复制到数组中。
关于javascript - GWT-JSNI 在外部 JS 库中传递 JavaScriptObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31179690/
我有以下 javaScript 对象 var stats = [ {x: 10, y: 300, clr:'blue'}, {x: 16, y: 600, clr:'blue'},
下面的 JSNI 包装器类是否做同样的事情? public final MyClass extends JavaScriptObject { // ... private static M
我已经成为 JavaScriptOverlayTypes 的忠实粉丝。 假设,我有以下 JSON 对象: { "product": { "name": "Widget", "pr
我有以下数据集 --> data1 和data2: data = []; data[0] = [{ "value": 29, "series": 1, "category":
情况:我有一个小型 http 服务器,在任何给定时间只能处理 4 个连接。打开网页时,我的网络浏览器会异步发送每个图像资源的 get 请求(尝试同时打开 4 个以上的连接)。这会导致一些不良行为。 初
在我的 gwt 应用程序中,我需要更新 JavaScriptObject 中某些字段的值。但我下面的方法似乎不起作用。 public class ViewModel extends JavaScrip
当我有这个类时,我怎么能手动创建一个 JavaScriptObject public class Person extends JavaScriptObject{ protected Pers
我在扩展的 JavaScriptObject 类中有以下 native 方法: public final native boolean getDelete() /*-{ return this.de
我需要一个包含 JsArray 和 String 的 JavaScriptObject。该 JsArray 应该具有像普通 GWT JsArray 一样的所有功能,如 push()、pop() 等。但
我正在从 JSON 创建一个具有 String[] 属性的对象,因此 JSON 如下所示: { key1: "val1", key2: ["val2a", "val2b", "val2c"], } 将
我目前正在尝试使用 gwt-map 库的第一个 gwt 应用程序。我在访问 ClientLocation 类上的 getLatitude() 和其他类似方法时遇到问题。我是 gwt 的新手,不用说 J
我想在通过 Eclipse 调试时查看GWT 框架的类内部属性值。 假设我有一个 com.smartgwt.client.widgets.tab.TabSet 对象作为 tabSet现在我想通过调试来
看起来 hashCode() 和 equals() 被声明为 final。所以重写实现是不可能的。它还指出,如果对象是 JavaScript 相同的(三重相等),则 equals() 返回 true。
我可以知道如何将 JavascriptObject 从 JSNI 转换为 gwt 作为 gwt CUstomWidget CustomWiget widget = (CustomWidget) jav
在我的 GWT 项目中,我确实需要在多个叠加层(JavaScriptObject)之间实现相同的接口(interface)。 根据文档: Starting with GWT 2.0, it is pe
使用 GWT JSNI JavaScriptObject 和 Element 作为 JSNI 方法的参数类型有什么区别? 考虑以下方法: native void method(JavaScriptOb
我正在拼命地尝试创建一个 Anno JSNI 方法中的对象,但我有一个奇怪的问题:jsni 方法中的代码不起作用,但如果我在浏览器控制台中执行相同的操作,它就可以正常工作。 Java 部分 我正在使用
假设我有一个对现有 JavaScriptObject 的引用,它包含一个基本类型,比如一个 int 值,我如何才能获得这个 int 值? 最佳答案 使用 JSNI在 GWT 的 Java 和底层 Ja
我从服务器接收 JSON 格式的数据,并使用 JsonUtils (GWT) 进行解析。它们看起来像这样: [{"id":26,"name":"Circle1","description":"Test
我需要从外部 javascript 库执行 Javascript(我将其留在公共(public)文件夹中,与客户端、服务器和共享处于同一级别)。我需要将该 JavaScript 的输出(这是由 Che
我是一名优秀的程序员,十分优秀!