使用Electron在URL中传递URL?

时间:2016-07-24 23:11:22

标签: javascript node.js url electron libvlc

我正在使用Electron进行我的项目。我需要在窗口之间传递一个URL,我正在通过以下方式使用URL:

function openWindow(url) {
    url=encodeURIComponent(url);
    const remote = require('electron').remote;
    const BrowserWindow = remote.BrowserWindow;
    var win = new BrowserWindow({ width: 800, height: 600 });
        win.loadURL('file://' + __dirname + '/otherwindow.html?url=' + url);
}

在接收端(otherwindow.html)我以这种方式得到参数:

var urlParam = function(name, w){
    w = w || window;
    var rx = new RegExp('[\?]'+name+'=([^\#]+)'),
        val = w.location.search.match(rx);
    return !val ? '':val[1];
}

我将此功能称为:

var decoded=decodeURIComponent(urlParam('url'));

这一切都很好。它现在很难看,但它有效。或者看起来如此。如果我将解码后的URL打印到控制台,则会正确显示。看起来没问题,如果我用它打开一个Electron窗口,它就会毫无问题地显示目的地。

这是一个问题。我在这个项目中使用wcjs-player。在目标页面(otherwindow.html)中是一个wcjs-player实例,它将获取已解码的URL并使用.addPlaylist();.vlc.play();播放位于此处的媒体。

如果我将目标网址放在同一页面的变量中然后将其作为参数添加到这两个函数中,它可以正常工作,即使我使用encodeURIComponent();然后decodeURIComponent();也可以工作变量,所以编码URL不是问题。我甚至尝试使用base64编码在页面之间传递,但没有成功。

所以从这一切来看,我认为问题不在于编码本身,而是在页面之间传递。我的(可能是错误的)理论是URL可能会以某种方式稍微改变(丢失/获取一些信息,特殊字符可能?),wcjs-player不准备处理,但Chromium是(因为电子没有问题)窗口使用结果URL)。

我不知道解决这个问题,我已经尝试了所有的想法。做了一些搜索,但没有找到任何有用的东西。我可以用另一种方式解决它,但这将涉及打开和处理相同的文件两次 - 在两个窗口 - 我试图避免。

我对Javascript整体都很陌生,所以如果我错过了一些微不足道的话,请原谅。任何帮助表示赞赏!

0 个答案:

没有答案