Javascript - получение неправильного размера для текущего iframe в iPhone - PullRequest
0 голосов
/ 16 мая 2018

Это изоляция большей проблемы.Я работаю с родительским окном, которое содержит iframe.

Когда я запускаю следующий код на своем мобильном телефоне Android (протестирован с Chrome), я получаю всплывающее окно с 300 , 300, как и ожидалось.То же самое происходит на моем настольном компьютере (с любым браузером: Firefox, Chrome и т. Д.).

Но когда я делаю то же самое с IPhone / Safari или IPhone / Chrome, я получаю: 700 , 700.

Мне нужно получить: 300 , 300 на моем IPhone независимо от размера, который я установил на .frame.Другими словами, мне нужен размер области просмотра, который установлен в родительском окне.

Если вы хотите быстро попробовать то, что я имею в виду (Android or Desktop против iPhone), вы можете запустить следующееНапример, где вы увидите, что на iPhone вы получите: 700 , 700 где это должно быть 300, 300:

var content_iframe = '<!DOCTYPE html>'+
'<html>'+
'<head>'+
'<meta name="viewport" content="width=device-width, initial-scale=1" \/>'+
'<meta charset="UTF-8" \/>'+
'<title>IFrame<\/title>'+
'<style type="text\/css">'+
'body, html {'+
'	margin: 0;'+
'	padding: 0;'+
'	overflow: hidden;'+
'}'+
'.frame {'+
'	position: absolute;'+
'	width: 700px;'+  // I need this to be ignored!
'	height: 700px;'+ // I need this to be ignored!
'}'+
'<\/style>'+
'<script type="text\/javascript">'+
'setTimeout(function(){'+
'	var width = window.innerWidth;'+
'	var height = window.innerHeight;'+
'	alert(width + " , " + height);'+
'}, 500);'+
'<\/script>'+
'<\/head>'+
'<body>'+
'	<div class="frame"><\/div>'+
'<\/body>'+
'<\/html>';
document.getElementById('test_iframe').src = "data:text/html;charset=utf-8," + escape(content_iframe);
iframe {
    /* this is what I need to be output */
	border: none;
	width: 300px;
	height: 300px;
	background-color: #e9f1ff;
}
<iframe id="test_iframe"></iframe>

Просто, если вы не можете запустить приведенный выше пример на вашем iPhone прямо здесь со встроенным бегунком, вы можете попробовать JSFiddle бегун здесь:

https://jsfiddle.net/ssbo3dh8/

Не могли бы вы предоставить мне JSFiddle с рабочим кодом для iPhone на основе моего кода выше? Я имею в виду, просто делаянеобходимые модификации?

Есть идеи, как получить эту работу?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Проверьте ваше тело вместо окна

<script type="text/javascript">
setTimeout(function(){
    var width = document.querySelector('body').offsetWidth;
    var height = document.querySelector('body').offsetHeight;
    alert(width + ' , ' + height);
}, 500);
</script>
0 голосов
/ 16 мая 2018

Проверьте еще раз этот код:

var content_iframe = '<!DOCTYPE html>'+
'<html>'+ 
'<head>'+
'<meta name="viewport" content="width=device-width, initial-scale=1" \/>'+ 
'<meta charset="UTF-8" \/>'+
'<title>IFrame<\/title>'+
'<style type="text\/css">'+
'body, html {'+
'   margin: 0;'+ 
'   padding: 0;'+ 
'   overflow: hidden;'+ 
'}'+ 
'.frame {'+ 
'   position: absolute;'+ 
'   width: 700px;'+  // I need this to be ignored! '    
height: 700px;'+ // I need this to be ignored! '}'+ 
'.main {'+ '    
width: 300px;'+  // I need this to be ignored! '    
height: 300px;'+ // I need this to be ignored! '}'+ 
'<\/style>'+ 
'<script type="text\/javascript">'+ 
'setTimeout(function(){'+ 
'   var width = document.getElementById("main").offsetWidth;'+ '    
var height = document.getElementById("main").offsetHeight;'+ '  
alert(width + 
" , " + 
height);'+ 
'}, 500);'+ 
'<\/script>'+ 
'<\/head>'+ 
'<body>'+ 
'<div id="main" class="main">   <div class="frame"><\/div>  </div>'+ 
'<\/body>'+ 
'<\/html>'; 
document.getElementById('test_iframe').src = "data:text/html;charset=utf-8," + escape(content_iframe);

HTML

<iframe id="test_iframe"></iframe>

CSS

iframe {
  /* this is what I need to be output */
    border: none;
    width: 300px;
    height: 300px;
    background-color: #e9f1ff;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...