首页 > 其他分享 >一对一视频直播app开发,实现跨域的多种方式

一对一视频直播app开发,实现跨域的多种方式

时间:2024-06-01 09:34:41浏览次数:15  
标签:hash 跨域 一对一 app window html iframe com

一对一视频直播app开发,实现跨域的多种方式

一、document.domain + iframe跨域

此方案仅限主域相同,子域不同的跨域应用场景。实现原理:两个页面都通过js强制设置document.domain为基础主域,就实现了同域。

父窗口(http://www.demo.com/a.html))

<iframe id="iframe" src="http://child.demo.com/b.html"></iframe>
<script>
  document.domain = 'demo.com';
  var user = 'admin';
</script>

 

子窗口(http://child.demo.com/b.html))

<script>
  document.domain = 'demo.com';
  // 获取父窗口中变量
  alert('get js data from parent ---> ' + window.parent.user);
</script>

 

二、location.hash + iframe跨域

实现原理: a欲与b跨域相互通信,通过中间页c来实现。 三个页面,不同域之间利用iframe的location.hash传值,相同域之间直接js访问来通信。
具体实现:A域:a.html -> B域:b.html -> A域:c.html,a与b不同域只能通过hash值单向通信,b与c也不同域也只能单向通信,但c与a同域,所以c可通过parent.parent访问a页面所有对象。
实现原理: a欲与b跨域相互通信,通过中间页c来实现。 三个页面,不同域之间利用iframe的location.hash传值,相同域之间直接js访问来通信。
具体实现:A域:a.html -> B域:b.html -> A域:c.html,a与b不同域只能通过hash值单向通信,b与c也不同域也只能单向通信,但c与a同域,所以c可通过parent.parent访问a页面所有对象。

a.html:(http://www.demo1.com/a.html))

<iframe id="iframe" src="http://www.demo2.com/b.html" style="display:none;"></iframe>
<script>
  var iframe = document.getElementById('iframe');
 
  // 向b.html传hash值
  setTimeout(function() {
      iframe.src = iframe.src + '#user=admin';
  }, 1000);
  
  // 开放给同域c.html的回调方法
  function onCallback(res) {
      alert('data from c.html ---> ' + res);
  }
</script>

 

b.html:(http://www.demo2.com/b.html))

<iframe id="iframe" src="http://www.demo1.com/c.html" style="display:none;"></iframe>
<script>
  var iframe = document.getElementById('iframe');
 
  // 监听a.html传来的hash值,再传给c.html
  window.onhashchange = function () {
      iframe.src = iframe.src + location.hash;
  };
</script>

 

c.html:(http://www.demo1.com/c.html))

<script>
  // 监听b.html传来的hash值
  window.onhashchange = function () {
      // 再通过操作同域a.html的js回调,将结果传回
      window.parent.parent.onCallback('hello: ' + location.hash.replace('#user=', ''));
  };
</script>

 

三、window.name + iframe跨域

window.name属性的独特之处:name值在不同的页面(甚至不同域名)加载后依旧存在,并且可以支持非常长的 name 值(2MB)。

a.html:(http://www.demo1.com/a.html))

var proxy = function(url, callback) {
  var state = 0;
  var iframe = document.createElement('iframe');
 
  // 加载跨域页面
  iframe.src = url;
 
  // onl oad事件会触发2次,第1次加载跨域页,并留存数据于window.name
  iframe.onload = function() {
      if (state === 1) {
          // 第2次onload(同域proxy页)成功后,读取同域window.name中数据
          callback(iframe.contentWindow.name);
          destoryFrame();
      } else if (state === 0) {
          // 第1次onload(跨域页)成功后,切换到同域代理页面
          iframe.contentWindow.location = 'http://www.demo1.com/proxy.html';
          state = 1;
      }
  };
 
  document.body.appendChild(iframe);
 
  // 获取数据以后销毁这个iframe,释放内存;这也保证了安全(不被其他域frame js访问)
  function destoryFrame() {
      iframe.contentWindow.document.write('');
      iframe.contentWindow.close();
      document.body.removeChild(iframe);
  }
};
 
// 请求跨域b页面数据
proxy('http://www.demo2.com/b.html', function(data){
  alert(data);
});

 

proxy.html:(http://www.demo1.com/proxy…)

中间代理页,与a.html同域,内容为空即可。
b.html:(http://www.demo2.com/b.html))

<script>
  window.name = 'This is demo2 data!';
</script>

 

通过iframe的src属性由外域转向本地域,跨域数据即由iframe的window.name从外域传递到本地域。这个就巧妙地绕过了浏览器的跨域访问限制,但同时它又是安全操作。

以上就是一对一视频直播app开发,实现跨域的多种方式, 更多内容欢迎关注之后的文章

 

标签:hash,跨域,一对一,app,window,html,iframe,com
From: https://www.cnblogs.com/yunbaomengnan/p/18225548

相关文章

  • 【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service
    在前一篇文章中,我们是把.NET8应用读取SSL证书(X509)示例部署在AppServiceWindows环境中,那么如果部署在Linux环境,以及LinuxContainer中呢?根据前文中的第一种方法,直接在把证书文件包含在源文件中,通过相对路径读取证书文件的方式,经测试,可以正常工作。但是,对于第二种“通过指......
  • 基于ssm框架的app信息管理平台的设计与实现论文
    APP信息管理平台是一个功能强大的综合性管理平台,旨在为用户提供全面、便捷的公告信息、APP信息以及APP下载管理服务。在APP信息管理方面,平台提供了APP信息的上传、更新、维护等功能。用户可以轻松管理APP的基本信息、版本更新、功能介绍等内容,确保用户能够随时获取到最新......
  • 1v1视频软件源码,通过jsonp跨域的代码分析
    1v1视频软件源码,通过jsonp跨域的代码分析通常为了减轻1v1视频软件源码web服务器的负载,我们把js、css,img等静态资源分离到另一台独立域名的服务器上,在html页面中再通过相应的标签从不同域名下加载静态资源,而被浏览器允许,基于此原理,我们可以通过动态创建script,再请求一个带参网址实......
  • 一对一直播软件源码,比较常用的数组排序方式有哪些?
    一对一直播软件源码,比较常用的数组排序方式有哪些?一、简单的sort排序:vararr=[1,5,3,87,23];arr.sort(function(a,b){returna-b;})console.log(arr);//输出:[1,23,3,5,87] 注:若返回b-a可获得从大到小的排序;数组的sort方法只能实现简单的按位排序,并不精......
  • uniapp使用EventBus实现页面间数据传递
    前情最近在做小程序项目,选用是当前比较火的uniapp技术栈,经常会遇到页面间消息传递的需求。为什么要这么做?uniapp页面间数据通信方式有很多:通过url传参,状态管理库vuex/pinia,本地存储,事件通道eventChannel,EventBus等,这次的需求是在A面点击一个按钮跳转到B页面拾取一个数据选项再......
  • uniapp实现图片上传——支持APP、微信小程序
    uniapp实现图片、视频上传文章目录uniapp实现图片、视频上传效果图组件templatejs使用相关文档:结合uView插件+uni.uploadFile实现u-uploaduploadfile效果图组件简单封装,还有很多属性…,自定义样式等…根据个人所需调整template<template> <view>......
  • Uscrapper:一款功能强大的网络资源爬取工具
    关于UscrapperUscrapper是一款功能强大的网络资源爬取工具,该工具可以帮助广大研究人员从各种网络资源中轻松高效地提取出有价值的数据,并且提供了稳定、友好且易于使用的UI界面,是安全研究人员和网络分析人员的强有力工具。Uscrapper最大程度地释放了开源情报资源的力量,该工具......
  • 揭秘APP广告变现项目
    在当今移动应用市场,广告变现已经成为开发者盈利策略的重要组成部分。通过在应用程序中展示多种类型的广告,如插页式广告、横幅广告和激励视频广告,开发者能够获得经济效益。实现这一目标的核心在于平衡收入与用户体验,避免过度干扰用户。激励视频广告由于其高观看率和参与度......
  • 在处理预览影片时,AppStore 提交卡住了
    我昨天提交了一个新的应用程序,其中包含一个适用于多种尺寸设备的视频预览文件(6.7,以及6.7的一个副本,适用于6.5、5.5和12.9)。iPhone文件每个都需要5-10分钟的处理时间(文件图标显示云图像),但每个文件最终都能正常运行。iPad文件上传正常,但18小时后仍显示云图标。所有这......
  • 柬埔寨语翻译通App上架啦!支持高棉语翻译成中文,中柬互译,高棉语OCR文字识别提取,提高工作
    大家好!有个超级棒的消息要告诉大家——柬埔寨语翻译通小程序已经上架啦!不论你是安卓还是苹果用户,都可以轻松下载使用!只要微信搜一搜,翻译之路畅通无阻!这不仅仅是一个翻译工具,它还支持高棉语中文双语翻译,翻译结果支持语音朗读,翻译记录自动保存!跟着说跟着读,高棉语词汇轻松掌握......