invisible bob
invisible bob

Reputation: 864

Odd javascript XSS error

I'm designing a simple way to communicate between iframes, and I am getting an odd XSS error, even though Both URLs have the save domain.

Unsafe JavaScript attempt to access frame with URL file:///home/bryre/sharedData/Programs/javascript/pong/htdocs/connectionWindow.html from frame with URL file:///home/bryre/sharedData/Programs/javascript/pong/htdocs/connectionTest.html. Domains, protocols and ports must match.

Do i need to have them on a server to get it to work? here is the code:

ConnectionTest.html

<html>
<head>
    <title>connectionTest</title>
    <script src='connection.js'></script>
</head>
<body>
    <script>
        var windowToConnectTo = document.createElement('iframe')
        windowToConnectTo.src = 'connectionWindow.html'
        document.body.appendChild(windowToConnectTo)

        var connection = new Connection({});
        connection.connect(windowToConnectTo, 10);
    </script>
</body>

ConnectionWindow.html

<html>
<head>
    <title>connectionTest</title>
    <script src='connection.js'></script>
</head>
<body>
    <script>
        var connection = new Connection({});
    </script>
</body>

connection.js

function Connection(commands){
this.inDiv = document.createElement('div')
this.inDiv.id = 'in'
this.inDiv.style.disply = 'none'
document.body.appendChild(this.inDiv)

this.commands = commands
}

Connection.prototype = {
attemptConnect: function(to){
    to.document = (to.contentWindow || to.contentDocument)
    if(to.document.document)
        to.document = to.document.document
    this.to = to.document.getElementById('in') //ERROR HAPPENS HERE
    if(this.to == null)
        return false
    return true
},
connect: function(to, retryRate){
    cThis = this
    var interval = setInterval(function(){
        if(cThis.attemptConnect(to))
            clearInterval(interval)
    }, retryRate)
}
}

Upvotes: 0

Views: 189

Answers (1)

Quentin
Quentin

Reputation: 944217

They don't have any domain, they are local files. Use an HTTP server to access them.

Upvotes: 4

Related Questions