0

这是我将请求消息发送到服务器并取回响应并打印出来的小代码片段。这是一个 chrome 插件,但问题是如果在浏览器上发生任何 onClick 操作,那么它将获取 url 并必须发送到另一个 JavaScript 文件,然后这个 JavaScript 文件负责将 url 发送到 node.js 服务器

url.js(在点击时获取 url)文件是:

$(document).click(function (e) {

    if ($(e.target).closest('a').length) {
        // I want this url variable to be transferred from here to the below
        // JavaScript file
        var url = $(e.target).closest('a').attr('href');
    } else {
        alert('You did not click a link');
    }
});

另一个接受参数的 javascript 文件是:

window.WebSocket = window.WebSocket || window.MozWebSocket;
var connection = new WebSocket('ws://localhost:1337');

connection.onopen = function () {
    connection.send(url);
    connection.send("http://static.adzerk.net/Advertisers/bd294ce7ff4c43b6aad4aa4169fb819b.jpg");
};

connection.onerror = function (error) {
    alert("something went wrong with your server  " + error);
};

connection.onclose = function () {
    alert("server had shut down now ");
};

connection.onmessage = function (message) {

    try {
        var json = JSON.parse(message.data);
    } catch (e) {
        console.log('This doesn\'t look like a valid JSON: ', message.data);
        return;
    }
    if (json.type === 'message') {

        addMessage(json.data.text);

    } else {
        console.log('Hmm..., I\'ve never seen JSON like this: ', json);
    }
};

function addMessage(message) {

    var rec_object = message;
    var regexp1 = /[\/a-zA-Z]+(.jpg)/;
    var regexp2 = /[\/a-zA-Z]+(.mp3)/;
    var regexp3 = /[\/a-zA-Z]+(.mp4)/;
    if (regexp1.test(rec_object)) {
        document.write("<img width=\"300\" height=\"250\" src=\"" + rec_object + "\" \/>")
        document.write("<br /><br /><br /><br /><br /><br /><br /><br />");
    } else
    if (regexp2.test(rec_object)) {
        document.write("<audio controls>");
        document.write("<source src=\"" + rec_object + "\"type=audio\/mpeg \/>");
        document.write("</audio>");
        document.write("<br /><br /><br /><br /><br /><br /><br /><br />");
    } else
    if (regexp3.test(rec_object)) {
        document.write("<video width=\"300\" height=\"250\" controls>")
        document.write("<source src=\"" + rec_object + "\"type=video\/mp4 \/>");
        document.write("</video>");
    } else
        document.write(rec_object);

}

那么我怎么能不使用查询字符串呢?我只想将它从一个文件发送到另一个文件。我像上面一样尝试过,但我什么也没得到。

4

1 回答 1

0

代替以下内容:

var url = $(e.target).closest('a').attr('href');

使用全局变量:

window.url = $(e.target).closest('a').attr('href');

然后,在您的其他文件中也使用connection.send(window.url). 这将使您继续前进,但请阅读下文。

注意::使用全局变量是一种非常糟糕的做法。理想情况下,我会重组您的代码以创建一个Connection具有名为的属性的对象,该属性url是从回调中实例化的,然后您可以简单地调用您想要调用的任何方法。它的所有方法都适用于局部变量url

于 2013-11-15T05:39:05.667 回答