2

我一直在使用一些代码(由 John Evans 编写)从 Dart 中执行 javascript:

void injectJavascript(String javascript, [bool removeAfter = false]){
  var s = new Element.tag("script");
  s.attributes["type"] = "text/javascript";
  s.text = javascript;
  document.body.nodes.add(s);
  if (removeAfter != null && removeAfter)
    s.remove();
}

injectJavascript("alert('using javascript')");

但我无法发送或返回变量。这目前可能吗?如果没有,知道什么时候可以实现吗?

4

3 回答 3

5

您将需要使用postMessage来执行此操作。例如,如果您已将变量转换为 JSON,那么您可以在 Dart 内部执行此操作

window.postMessage(jsonMessage, "*");

然后像这样从JavaScript端拿起它

function recieveMessage(event) {
  var message = JSON.parse(event.data);
  :
}
window.addEventListener("message", receiveMessage, false); 

如果您需要使用更高级的东西,例如双向通信和回调,请查看 DartGap 的代码,特别是DeviceMessageRouter类和javascript 集成层。

于 2012-05-20T19:53:52.890 回答
2

您可以使用dart.js直接执行 javascript 函数并捕获返回。

var result = js.context.callMethod('getAnswer', [new js.JsObject.jsify(myargs)]);

然而,传递/返回对象的类型是有限的。有关可以直接传递哪些对象的信息,请参阅上面的链接。另请注意,在用作 callMethod 的参数之前,列表和应该是“jsified”。

于 2016-04-08T13:22:11.857 回答
1

您可以使用dart:js

该库提供从 Dart 访问 JavaScript 对象,允许 Dart 代码获取和设置属性,调用 JavaScript 对象的方法和调用 JavaScript 函数。该库负责在可能的情况下在 Dart 和 JavaScript 对象之间进行转换,或者在无法转换时提供代理。

另请参阅文章使用 Dart 中的 JavaScript

于 2014-01-20T12:16:44.980 回答