Can I communicate between two local html files usi

2020-02-07 05:51发布

问题:

I have two local .html files in the same folder. One page opens a window with the other page, and attempts to call a function in the newly opened window. However, the function call fails, and I get this in the console:

Unsafe JavaScript attempt to access frame with URL file:///***/A.html from frame with URL file:///***/B.html. Domains, protocols and ports must match.

This happens on both Chrome and Webkit (Mac). Is there any way I can either: disable the cross-domain checks for the file:// protocol, or call a javascript function in a different local file?

回答1:

You can use window.postMessage to do something like this:

The initial window html file:

<!DOCTYPE html>
<html>
    <head>
        <script>
            var otherWindow;
            function openOther() {
                otherWindow = window.open("other.html", "otherWindow");

            }

            function otherFunc() {
                otherWindow.postMessage("otherFunc", "*");
            }
        </script>
    </head>
    <body>
        <div onclick="openOther()">Open the other window</div>
        <div onclick="otherFunc()">Call the other window's function</div>
    </body>
</html>

Html for the second window:

<!DOCTYPE html>
<html>
    <head>
        <script>
            window.addEventListener("message", function(event) {
                alert("The other window's function executed.");
            }, false);
        </script>
    </head>
    <body>
        <div>This is the other window.</div>
    </body>
</html>

Here's a good reference for window.postMessage.