Facebook Instant Article custom embed does not make requests

I am trying to embed my own script (which introduces an iframe with some content) inside the FB Instant article.

It seems to work correctly only for some devices (e.g. iPhone 5s and 6s, LG G2), but others (Samsung devices) do not seem to load anything.

Apparently, the problem is making the actual request for the script src, but this is just an assumption. (I changed src to angular for a demonstration).

I am trying to debug this using the tools that Facebook offers: Link

I added an example of my page (for reference only, if you insert it into the article editor, it will raise a warning).

Note: when my code is inserted into the script tag directly without a request from some source, it works as expected.

What happened? Why doesn't FB Instant Articles call the script?

thank

<!doctype html><html><head><link rel="canonical" href="http://news.mywebsite.com/some-canonical-url/"/><meta charset="utf-8"/><meta property="op:generator" content="facebook-instant-articles-sdk-php"/><meta property="op:generator:version" content="1.3.0"/><meta property="op:generator:application" content="facebook-instant-articles-wp"/><meta property="op:generator:application:version" content="2.11"/><meta property="op:generator:transformer" content="facebook-instant-articles-sdk-php"/><meta property="op:generator:transformer:version" content="1.3.0"/><meta property="op:markup_version" content="v1.0"/><meta property="fb:article_style" content="default"/></head><body><article><header><figure><img src="https://www.google.co.il/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"/></figure><h1>js embed TEST!!!!</h1><time class="op-published" datetime="2016-06-24T13:50:14+00:00">June 24th, 1:50pm</time><time class="op-modified" datetime="2016-07-18T16:21:25+00:00">July 18th, 4:21pm</time><address><a>dev guy</a></address><h3 class="op-kicker">test kicker</h3></header><p><b>Nthi is a TEST</b></p>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker <a href="http://www.lipsum.com/">including versions of Lorem Ipsum.</a>)</p>
<h2>vine</h2>
<figure class="op-interactive">
  <iframe src="https://vine.co/v/Ot2mpV1YO6F/embed/simple" width="600" height="600"></iframe>
</figure>
<h2>script tag with src</h2>
<figure class="op-interactive">
	<iframe class="no-margin">
           <div class="wrapper" id="111">
           		<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.js"></script>
           </div>    
	</iframe>
</figure>

<h2>script taht injects a script tag</h2>
<figure class="op-interactive">
	<iframe>
<div class="wrapper" id="222">
  <script src="http://jsconsole.com/js/remote.js?762226ac-81f8-4a2a-8403-4f834c8db5de"></script>
  <script>
    // get parent div
    var scriptTag = document.getElementsByTagName('script');
        scriptTag = scriptTag[scriptTag.length - 1];
    var parentNode = scriptTag.parentNode;
  var s = document.createElement("script");
s.type = "text/javascript";
s.src = "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.js";
    parentNode.appendChild(s);
  </script>
</div>   
	</iframe>
</figure>

<h2>script using get req. and eval response</h2>
<figure class="op-interactive">
	<iframe>
<div class="wrapper" id="333">
  <script src="http://jsconsole.com/js/remote.js?6f3e6a5a-5408-4419-8331-7a4b76f5b8bb"></script>
  <script>var xmlHttp = new XMLHttpRequest();
window.stat = 2;
  xmlHttp.onreadystatechange = function(state) {
    window.stat = 3;
    window.xmlHttp = xmlHttp;
    if (xmlHttp.response && xmlHttp.readyState === 4 && xmlHttp.status === 200) {
      window.stat = 5;
      window.res = xmlHttp.response;
      eval(xmlHttp.response);
    }
    else {
      window.stat = 4;
    }
  };

  xmlHttp.open("GET", "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.js", true); // true for asynchronous
  xmlHttp.send(null);</script>
</div>   
	</iframe>
</figure>
</article></body></html>
Run codeHide result
+4
source share
1 answer

I ran into the same issue with Instagram and other social inserts. Downloading scripts via HTTPS allowed this for me. I could not find anything about the HTTPS documentation requirements on Facebook. I assume the browser / web browser is throwing a general warning about mixed content.

: <scripts> s:
https://jsconsole.com/js/remote.js?762226ac-81f8-4a2a-8403-4f834c8db5de
https://jsconsole.com/js/remote.js?6f3e6a5a-5408-4419-8331-7a4b76f5b8bb

0

Source: https://habr.com/ru/post/1648528/


All Articles