阻止iframe加载到移动设备上
Prevent iframe from loading on mobile
我正在处理我的公文包页面,我希望我的项目处于演示模式,用户可以在不同的视口中预览网站。我从这里得到了这个想法:http://my.studiopress.com/themes/genesis/#demo-全
在移动设备上,我希望不加载iframe,而是在新选项卡中打开项目的链接。
如果我将包含iframe的div隐藏在CSS文件的顶部,并显示:none,我可以看到iframe仍然在后台加载,页面加载需要很长时间。
在特定的设备或视口大小上,是否有任何方法可以阻止它们加载?
您可以通过使用JavaScript和HTML数据属性来实现这一点。通过将src属性设置为类似"#"的值,它将不会加载任何内容。您可以使用数据属性来存储URL,以便与JavaScript一起使用。
<iframe src="#" data-src="https://placekitten.com/200/300" frameborder="0"></iframe>
然后,您只需使用window.matchMedia()检查屏幕大小,并将src属性设置为特定的屏幕大小。
var $iframe = $('iframe'),
src = $iframe.data('src');
if (window.matchMedia("(min-width: 480px)").matches) {
$iframe.attr('src', src);
}
以下是一个工作示例:https://jsfiddle.net/5LnjL3uc/
如果你想在用户调整窗口大小后显示iframe,你需要将代码放入一个函数中,并将其绑定到一个调整大小事件:
var $iframe = $('iframe'),
src = $iframe.data('src');
function showIframe() {
if (window.matchMedia("(min-width: 480px)").matches) {
$iframe.attr('src', src);
}
}
$(window).on('resize', showIframe);
// Initialize it once on document ready
showIframe();
工作示例:https://jsfiddle.net/5LnjL3uc/1/
更好的解决方案是反向处理。
IE加载src时,首先不要将URL放在类似"data-src"的属性中。
请参阅下面的代码。当你的设备或设备宽度不是移动/移动大小时,你只需将数据src复制到你的src中。
我相信这是最好的解决方案,因为没有不确定性。使用前面提到的解决方案(我尝试过),当您的代码运行并决定加载iframe-src时,您正在与浏览器争分夺秒。
if(device !== true) {
// add '#' to the href
let iframe = document.getElementById('3dExperience')
iframe.src = iframe.getAttribute('data-src')
}
注意:"device"是用于检测移动设备的is mobile npm包。
- 当#在iFrame中使用HTML时,阻止页面移动
- 如何让iframe在设置负上边距后填充整个移动网页
- Iframe|youtube Iframe上的移动后退按钮
- 在移动应用程序上滚动iframe会在某个时刻跳到页面顶部
- 如何检测Facebook Javascript SDK'的移动iframe
- 阻止iframe加载到移动设备上
- 移动设备上的 iFrame 重定向主页问题
- 需要 iFrame 在滚动页面的其他部分时不移动
- 将整个文稿移动到 iframe 中
- 强制 iFrame 作为移动设备
- 如何在单击 iframe 中的按钮后将整个浏览器窗口移动到另一个页面
- YouTube 360 视频 iframe 在移动浏览器中不起作用
- 移动版 Chrome 上的 IFrame 播放器 API
- iframe关于光标移动问题的设计模式
- 使用jquery在dom中移动嵌入的youtube iframe会导致全屏无法在Windows8 IE10中工作
- 将整个文档移动到iframe中
- 如何在通过iFrame提交表单后更改当前url以移动到其原始url
- 在移动safari中按下后退按钮后,Javascript将停止在iframe中执行
- 如何检测iframe是否已从一个URL移动到另一个URL
- 如何在DOM中移动iFrame而不丢失其状态