【问题标题】:Calling my JavaScript from Dart从 Dart 调用我的 JavaScript
【发布时间】:2014-10-02 23:32:02
【问题描述】:

这应该很简单,但我似乎无法理解它。

所以我有我的 dartFile.dart,然后我有我的 javaScriptFile.js。如何链接这两者,以便我可以从我的 dartFile.dart 调用我的 javaScriptFile.js 中声明的 JavaScript 函数?

我尝试按照this post 中提供的解释进行操作,但我想这对我来说太模糊了:/

编辑:这是我尝试过的:

在我的 javaScriptFile.js 中,只有这个简单的函数:

function myFunction() {
  return 4;
}

在我的 dartFile.dart 中,只有这一块代码:

import 'package:js/js.dart' as js;

void main() {
  print(js.context.myFunction());
}

按照我提到的帖子中的说明,我在 pubspec.yaml 文件中添加了 js 的依赖项。 基本上我正是原始问题的提问者所在的位置 - 我可以调用基本的 JavaScript 函数,例如警报,但是当我尝试调用在 javaScriptFile.js 中声明的函数时,我得到一个“NoSuchMethodError”

【问题讨论】:

  • 您的问题应该更具体地说明您尝试完成的工作,并显示演示您尝试过的内容以及遇到的错误的代码。
  • 你说得很好。我尽量保持简单,但也许我应该更具体一些。现在好点了吗?
  • 已经可以使用 Dart 为什么还需要 JS?
  • 嘿,现在你问我才意识到这一定看起来如何:D 我需要使用用 JavaScript 编写的外部库(当然是由其他人编写的)。在这个例子中,我在这里使用了我自己的 JavaScript 文件,纯粹是为了学习目的 - 为了尽可能简化事情。

标签: javascript dart call dart-editor


【解决方案1】:

你可以这样做:

  1. 确保在 .dart 文件之前包含 JS 或确保在从 Dart 运行脚本之前加载所有 JS 文件

  2. dart 文件的内容:


import 'dart:js';

void main() {
  var ret = context.callMethod('myFunction', ['a', 'b']);
  var inst = new JsObject(context['someClass'], ['instance']); 
  print(inst);
}
  1. 我的 JS 文件:

function myFunction() {
  console.log(arguments);
}

function someClass(a) {
  this.a = a;
}

这应该会给你类似的输出

[object Arguments] // from console.log
[object Object]    // from print()

问候, 罗伯特

【讨论】:

  • 谢谢,现在可以完美运行了!我对“确保在 .dart 文件之前包含 JS”感到困惑一秒钟,但后来我意识到您的意思是 .html 文件中的 行。 (因此,我写这个评论,以防其他人被困在我做的地方)
猜你喜欢
  • 2012-11-30
  • 2018-06-22
  • 2023-01-16
  • 2014-03-23
  • 2014-05-31
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 2021-01-27
相关资源
最近更新 更多