Nodejs环境下如何利用js和flash交互

Nodejs环境下如何利用js和flash交互

比如我要获取一个flash播放器中的url那么js该怎么做,有没有人做过,求指导

8 回复

在Node.js环境下,JavaScript和Flash之间的交互通常不是直接的。这是因为Flash是一种基于浏览器的技术,而Node.js主要运行在服务器端。然而,你可以在客户端使用JavaScript与Flash进行交互,并通过某些机制将这些信息传递给服务器端的Node.js应用。

客户端JavaScript与Flash交互

在浏览器中,你可以使用JavaScript的ExternalInterface API来与Flash进行通信。以下是一个简单的示例:

Flash文件 (player.swf)

// 在Flash中定义一个函数,允许JavaScript调用它
ExternalInterface.addCallback("getURL", getURLFromFlash);

function getURLFromFlash() {
    return "http://example.com/video.mp4";
}

HTML文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flash and JavaScript Interaction</title>
</head>
<body>
    <object type="application/x-shockwave-flash" data="player.swf" width="500" height="400">
        <param name="movie" value="player.swf" />
    </object>

    <script>
        // 使用JavaScript调用Flash中的函数
        function getFlashURL() {
            var flashMovie = document.getElementById('flashPlayer');
            if (flashMovie) {
                var url = flashMovie.getURL();
                console.log("Flash URL: ", url);
                
                // 将结果发送到服务器端
                fetch('/api/flash-url', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({ url: url })
                });
            }
        }

        window.onload = function() {
            getFlashURL();
        };
    </script>
</body>
</html>

服务器端Node.js处理

在服务器端,你可以使用Express框架来接收从客户端发送的数据,并进行相应的处理。

Node.js服务器 (server.js)

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.json());

app.post('/api/flash-url', (req, res) => {
    const { url } = req.body;
    console.log("Received Flash URL:", url);
    
    // 这里可以添加任何你需要的操作,例如存储到数据库或进一步处理
    res.status(200).send('URL received');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

总结

  1. 客户端JavaScript 通过 ExternalInterface 调用Flash中的方法。
  2. Flash 中的方法返回所需的数据(如视频URL)。
  3. JavaScript 收到数据后,通过 fetch 发送POST请求到服务器。
  4. 服务器端Node.js 接收并处理这些数据。

这种方式可以实现Flash与JavaScript以及Node.js之间的间接通信。


这种网上例子还是挺多的,百度一下一大堆

尚未成功过…

谢谢亲,我先看看

这个的意思是在flash中要提供这样的接口,进行交互吧,我的想法是不考虑flash的代码结构,只用js单向的获取

你得仔细看我给你的API地址哦

ExternalInterface.addCallback 方法向JS公开其方法

而 ExternalInterface.call 则是调用JS现有的方法

在Node.js环境下,直接通过JavaScript与Flash进行交互是比较困难的,因为现代浏览器已经逐渐不再支持Flash。不过,如果你仍然需要实现这一功能,可以通过HTML和JavaScript来间接地完成。

假设你的Flash播放器嵌入在一个网页中,并且该播放器提供了一种方式(例如调用一个特定的方法)来获取URL。你可以使用JavaScript来调用这个方法并获取URL。然后,如果需要将这个URL传递给Node.js后端,可以考虑使用AJAX请求或者其他形式的HTTP请求来完成。

示例代码

HTML & JavaScript (客户端)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flash Interaction Example</title>
</head>
<body>
<embed id="flashPlayer" src="path/to/your/player.swf" type="application/x-shockwave-flash"></embed>

<script>
    function getFlashUrl() {
        // 假设Flash对象有一个名为getURL的方法,用于返回当前播放的URL
        var flashPlayer = document.getElementById('flashPlayer');
        if (flashPlayer && typeof flashPlayer.getURL === 'function') {
            return flashPlayer.getURL();
        }
        return null;
    }

    // 获取Flash播放器的URL
    var url = getFlashUrl();

    // 发送一个AJAX请求到Node.js服务器
    fetch('/api/get-flash-url', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({ url: url })
    }).then(response => response.json())
      .then(data => console.log(data))
      .catch(error => console.error('Error:', error));
</script>
</body>
</html>

Node.js (服务器端)

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.json());

app.post('/api/get-flash-url', (req, res) => {
    const { url } = req.body;

    if (!url) {
        return res.status(400).json({ error: 'URL is required' });
    }

    // 处理URL,例如保存到数据库或进行其他操作
    console.log(`Received URL from Flash player: ${url}`);

    res.json({ message: 'URL received successfully', url });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

解释

  1. 客户端:

    • 使用<embed>标签嵌入Flash播放器。
    • 定义一个getFlashUrl函数来调用Flash播放器的getURL方法。
    • 当需要时,通过fetch发送一个POST请求到服务器端,附带获取到的URL。
  2. 服务器端:

    • 使用Express框架处理HTTP请求。
    • 设置路由以接收来自客户端的POST请求,并提取出URL。
    • 对接收到的URL进行处理,这里简单地打印出来并返回成功响应。

请注意,以上代码仅为示例,实际应用中需要根据具体需求进行调整。

回到顶部