1

I am using a uihtml component inside a uifigure that loads a HTML file in its HTMLSource property. The HTML file just tries to fetch the contents of a text file located in the same folder, and outputs them inside a div component. The body in the HTML looks something like this:

<body>
    <div id="viewer"></div>
    
    <script>
        fetch("./example.txt")
            .then(response => response.text) 
            .then(textString => {
                document.getElementById('viewer').innerHTML = textString;
            });
    </script>
</body>

The problem is that I always get a "Page Not Found" (the status from the fetch response is 404). The documentation of uihtml says: Common web file types, like JavaScript and CSS, can be referenced from the HTML file you specify for the HTMLSource property, but other web file types might not be supported., so I am not sure if it is even possible to fetch a text/pdf/any other file.

From what I understand, when calling uihtml MATLAB injects an iframe on the webpage displayed by the uifigure. This iframe runs on a local web server, and whenever you append a script tag with a source, the script is also accessed from the web server. For example,

<body>
    <div id="viewer"></div>
    <script id="script-id" src = "./example.js"></script>
    <script>
         document.getElementById("viewer").innerHTML = document.getElementById("script-id").src;
    </script>
</body>

would display the source of the js file, which corresponds to something like: https://localhost:31515/static/xxxxxxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/example.js

That same location of the file we could get by appending the undocumented

  1. connector.getBaseUrl
  2. matlab.ui.internal.URLUtils.parseURL('/example.js',0)

I have tried fetching the text file with the full path to that web server location
(https://localhost:31515/static/.../example.txt) but the 404 error persists.

At this level of HTML/JS is where I start to struggle. It looks like there should be some way to fetch the data of the file since scripts can be loaded, but I can't find a way. Does anybody know how to successfully fetch the file? Do we need a special credential in the fetch request or something like that?

LordTumnus
  • 36
  • 3

0 Answers0