【问题标题】:How to call function in one javascript from other javascript如何从另一个javascript调用一个javascript中的函数
【发布时间】:2015-04-18 03:00:57
【问题描述】:

我必须从 signal.js java 脚本文件中访问 index.html 中的 cellid,cellid 是在 signal.js 文件中定义的。目前正在 index.html 中使用 require 函数来获取信号对象,但这不起作用

**index.html**

<!DOCTYPE html>
<html>
  <head>  
  <script type="text/javascript" charset="utf-8" src="signal.js"></script>
  <script type="text/javascript" charset="utf-8">
    var signal = require ("signal");
    alert("CellID : "+  signal.cellID);
    var CellID = signal.cellID;
  </script>
  </head>
</html>

signal.js

var exec = require('cordova/exec'),
    cordova = require('cordova');

var Signal = function() {
    this.imei = null;
    this.operator = null;
    this.cellID = null;
    this.lac = null;
    this.neighbors = {};
    // Create new event handlers on the window (returns a channel instance)
    this.channels = {
        watchingnetwork: cordova.addWindowEventHandler("watchingnetwork")
    };
    for (var key in this.channels) {
        this.channels[key].onHasSubscribersChange = Signal.onHasSubscribersChange;
    }

};

Signal.onHasSubscribersChange = function() {
    exec(signal.status, signal.error, "Signal", "getSignalInfo", []);
}

/**
 * Callback for signal initiated
 *
 * @param {Object} info            keys: imei, isPlugged
 */
Signal.prototype.status = function(info) {
    cordova.fireWindowEvent("watchingnetwork", info);
    if (info) {
        if (signal.imei !== info.imei || signal.operator !== info.operator) {

            if (info.imei == null && signal.imei != null) {
                return; // special case where callback is called because we stopped listening to the native side.
            }

            // Something changed. Fire watching network event

            signal.imei = info.imei;
            signal.operator = info.operator;
            signal.cellID = info.cellID;
            signal.lac = info.lac;
            signal.neighbors = info.neighbors;
        }
    }
};

/**
 * Error callback for signal initiated
 */
Signal.prototype.error = function(e) {
    console.log("Error initializing advanced network plugin: " + e);
};

var signal = new Signal();

module.exports = signal;

我该怎么做?

【问题讨论】:

  • 这里没有足够的信息来回答这个问题
  • CellID 在哪里,您发布的文件是什么?您发布的脚本看起来像 Signal 文件。你能澄清一下吗?
  • 这真的取决于你的源代码是如何组织的。您可以只需要 signal.js 并直接从分配的变量中获取 cellID,因为 signal.js 导出包含 cellID 的 Signal 实例。也就是说,如果您的应用程序与您的 signal.js 文件位于同一环境中,即服务器端 nodejs
  • @Vishwanath 我仍然对它应该在什么环境中运行感到有点困惑。这是一个网站吗?或者这是一个 NodeJS 应用程序?浏览器没有require 方法。

标签: javascript android cordova phonegap-plugins


【解决方案1】:

signal.js成为第一,

<script src="signal.js"></script>
<script>
    // Your code here
</script>

那么第二个&lt;script&gt; 可以使用signal.js 中定义的任何内容。

【讨论】:

  • 我添加了 ,但我是 java 脚本的新手,我不知道如何在其他 java 脚本中获取 cellid
  • @Vishwanath 与您在signal.js 中访问它的方式相同。把它想象成一个大的&lt;script&gt;,顶部是signal.js
  • OP 发布的脚本看起来像 NodeJS,而不是网页,基于 module.exportsrequire() 调用。
  • @NormanBreau 它们可以在网页上使用(前提是有合适的服务器)。如果是这种情况,用户可以将require("signal.js") 用于他们的文件as in this answer
【解决方案2】:

其实,如果你想使用函数Signal

// signal.js
var Signal = function() {

    // ....
};

// use function Signal 
Signal();

如果你想使用 Signal() ,你必须在它的作用域内。

所以……

<script src="signal.js"></script>
<script>
    // some code ...
</script>

上面的代码是指将signal.js文件中的代码和一些代码放在一个范围内。当您包含 js 文件时:signal.js,就像:

<script>
var Signal = function() {

    // ....
};

// some code ...
Signal()
<script>

将代码包含在一个范围内~

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多