|  | @@ -13,17 +13,40 @@ observer.observe(document, {
 | 
	
		
			
			| 13 | 13 |  
 | 
	
		
			
			| 14 | 14 |  const updateSizeWithMessage = element =>
 | 
	
		
			
			| 15 | 15 |    `
 | 
	
		
			
			| 16 |  | -  var updateSizeInterval = null;
 | 
	
		
			
			| 17 |  | -  var height = 0;
 | 
	
		
			
			|  | 16 | +  var lastHeight = 0;
 | 
	
		
			
			|  | 17 | +  var heightTheSameTimes = 0;
 | 
	
		
			
			|  | 18 | +  var maxHeightTheSameTimes = 5;
 | 
	
		
			
			|  | 19 | +  var forceRefreshDelay = 1000;
 | 
	
		
			
			|  | 20 | +  var forceRefreshTimeout;
 | 
	
		
			
			|  | 21 | +
 | 
	
		
			
			| 18 | 22 |    function updateSize(event) {
 | 
	
		
			
			| 19 |  | -    if (!window.hasOwnProperty('ReactNativeWebView') || !window.ReactNativeWebView.hasOwnProperty('postMessage')) {
 | 
	
		
			
			| 20 |  | -      !updateSizeInterval && (updateSizeInterval = setInterval(updateSize, 200));
 | 
	
		
			
			|  | 23 | +    if (
 | 
	
		
			
			|  | 24 | +      !window.hasOwnProperty('ReactNativeWebView') || 
 | 
	
		
			
			|  | 25 | +      !window.ReactNativeWebView.hasOwnProperty('postMessage')
 | 
	
		
			
			|  | 26 | +    ) {
 | 
	
		
			
			|  | 27 | +      setTimeout(updateSize, 200);
 | 
	
		
			
			| 21 | 28 |        return;
 | 
	
		
			
			| 22 | 29 |      }
 | 
	
		
			
			| 23 |  | -    clearInterval(updateSizeInterval)
 | 
	
		
			
			| 24 | 30 |      height = ${element}.offsetHeight || document.documentElement.offsetHeight;
 | 
	
		
			
			| 25 | 31 |      width = ${element}.offsetWidth || document.documentElement.offsetWidth;
 | 
	
		
			
			| 26 | 32 |      window.ReactNativeWebView.postMessage(JSON.stringify({ width: width, height: height }));
 | 
	
		
			
			|  | 33 | +
 | 
	
		
			
			|  | 34 | +    // Make additional height checks (required to fix issues wit twitter embeds)
 | 
	
		
			
			|  | 35 | +    clearTimeout(forceRefreshTimeout);
 | 
	
		
			
			|  | 36 | +    if (lastHeight !== height) {
 | 
	
		
			
			|  | 37 | +      heightTheSameTimes = 1;
 | 
	
		
			
			|  | 38 | +    } else {
 | 
	
		
			
			|  | 39 | +      heightTheSameTimes++;
 | 
	
		
			
			|  | 40 | +    }
 | 
	
		
			
			|  | 41 | +
 | 
	
		
			
			|  | 42 | +    lastHeight = height;
 | 
	
		
			
			|  | 43 | +
 | 
	
		
			
			|  | 44 | +    if (heightTheSameTimes <= maxHeightTheSameTimes) {
 | 
	
		
			
			|  | 45 | +      forceRefreshTimeout = setTimeout(
 | 
	
		
			
			|  | 46 | +        updateSize,
 | 
	
		
			
			|  | 47 | +        heightTheSameTimes * forceRefreshDelay
 | 
	
		
			
			|  | 48 | +      );
 | 
	
		
			
			|  | 49 | +    }
 | 
	
		
			
			| 27 | 50 |    }
 | 
	
		
			
			| 28 | 51 |    `;
 | 
	
		
			
			| 29 | 52 |  
 | 
	
	
		
			
			|  | @@ -47,7 +70,6 @@ const getBaseScript = ({ style, zoomable }) =>
 | 
	
		
			
			| 47 | 70 |      }
 | 
	
		
			
			| 48 | 71 |      document.body.appendChild(wrapper);
 | 
	
		
			
			| 49 | 72 |    }
 | 
	
		
			
			| 50 |  | -  var width = ${getWidth(style)};
 | 
	
		
			
			| 51 | 73 |    ${updateSizeWithMessage('wrapper')}
 | 
	
		
			
			| 52 | 74 |    window.addEventListener('load', updateSize);
 | 
	
		
			
			| 53 | 75 |    window.addEventListener('resize', updateSize);
 | 
	
	
		
			
			|  | @@ -60,13 +82,13 @@ const appendFilesToHead = ({ files, script }) =>
 | 
	
		
			
			| 60 | 82 |    files.reduceRight((combinedScript, file) => {
 | 
	
		
			
			| 61 | 83 |      const { rel, type, href } = file;
 | 
	
		
			
			| 62 | 84 |      return `
 | 
	
		
			
			| 63 |  | -          var link  = document.createElement('link');
 | 
	
		
			
			| 64 |  | -          link.rel  = '${rel}';
 | 
	
		
			
			| 65 |  | -          link.type = '${type}';
 | 
	
		
			
			| 66 |  | -          link.href = '${href}';
 | 
	
		
			
			| 67 |  | -          document.head.appendChild(link);
 | 
	
		
			
			| 68 |  | -          ${combinedScript}
 | 
	
		
			
			| 69 |  | -        `;
 | 
	
		
			
			|  | 85 | +      var link  = document.createElement('link');
 | 
	
		
			
			|  | 86 | +      link.rel  = '${rel}';
 | 
	
		
			
			|  | 87 | +      link.type = '${type}';
 | 
	
		
			
			|  | 88 | +      link.href = '${href}';
 | 
	
		
			
			|  | 89 | +      document.head.appendChild(link);
 | 
	
		
			
			|  | 90 | +      ${combinedScript}
 | 
	
		
			
			|  | 91 | +    `;
 | 
	
		
			
			| 70 | 92 |    }, script);
 | 
	
		
			
			| 71 | 93 |  
 | 
	
		
			
			| 72 | 94 |  const screenWidth = Dimensions.get('window').width;
 | 
	
	
		
			
			|  | @@ -83,17 +105,20 @@ const appendStylesToHead = ({ style, script }) => {
 | 
	
		
			
			| 83 | 105 |    // Escape any single quotes or newlines in the CSS with .replace()
 | 
	
		
			
			| 84 | 106 |    const escaped = currentStyles.replace(/\'/g, "\\'").replace(/\n/g, '\\n');
 | 
	
		
			
			| 85 | 107 |    return `
 | 
	
		
			
			| 86 |  | -          var styleElement = document.createElement('style');
 | 
	
		
			
			| 87 |  | -          styleElement.innerHTML = '${escaped}';
 | 
	
		
			
			| 88 |  | -          document.head.appendChild(styleElement);
 | 
	
		
			
			| 89 |  | -          ${script}
 | 
	
		
			
			| 90 |  | -        `;
 | 
	
		
			
			|  | 108 | +    var styleElement = document.createElement('style');
 | 
	
		
			
			|  | 109 | +    styleElement.innerHTML = '${escaped}';
 | 
	
		
			
			|  | 110 | +    document.head.appendChild(styleElement);
 | 
	
		
			
			|  | 111 | +    ${script}
 | 
	
		
			
			|  | 112 | +  `;
 | 
	
		
			
			| 91 | 113 |  };
 | 
	
		
			
			| 92 | 114 |  
 | 
	
		
			
			| 93 | 115 |  const getInjectedSource = ({ html, script }) => `
 | 
	
		
			
			| 94 | 116 |  ${html}
 | 
	
		
			
			| 95 | 117 |  <script>
 | 
	
		
			
			| 96 |  | -${script}
 | 
	
		
			
			|  | 118 | +// prevents code colissions with global scope
 | 
	
		
			
			|  | 119 | +(() => {
 | 
	
		
			
			|  | 120 | +  ${script}
 | 
	
		
			
			|  | 121 | +})();
 | 
	
		
			
			| 97 | 122 |  </script>
 | 
	
		
			
			| 98 | 123 |  `;
 | 
	
		
			
			| 99 | 124 |  
 |