编程语言
首页 > 编程语言> > Javascript小书签可从一页获取信息,然后将其提交到另一页上的表单中

Javascript小书签可从一页获取信息,然后将其提交到另一页上的表单中

作者:互联网

既然我发现在这里我无法在一个页面上编写JavaScript来在另一外部页面上输入表单数据,那么我想使用基于浏览器的书签来实现.

我可以使用以下书签代码段访问原始页面上的数据:

javascript:var%20thecode=document.myForm.myTextArea.value;

如果我在浏览器中手动打开基于Web的外部表单,则此代码将更改文本框中的内容:

javascript:void(document.externalForm.externalTextArea.value="HELLO WORLD"));

此小书签代码将使用外部形式打开一个新的浏览器窗口:

javascript:newWindow=window.open("http://www.url.com","newWindow");if(window.focus){void(newWindow.focus());}

但是,当我尝试将这些代码片段放到一个小书签中以在新窗口中打开外部表单并更改其中的数据时,我无法访问newWindow中的任何元素.例如,这在新窗口中无法检查文本区域的现有值

javascript:var%20newWindow=window.open("http://www.url.com","newWindow");if(window.focus){void(newWindow.focus());}window.alert(newWindow.document.externalForm.externalTextArea.value);

一旦我使用bookmarklet代码将新窗口作为newWindow打开,我似乎将无法访问该新窗口中的元素.有什么建议我想念的吗?谢谢.

解决方法:

这是因为小书签在当前网页的沙箱(环境)中运行.由于不允许访问(页面的DOM)没有相同协议,域名和端口的另一个页面,因此当协议,域和端口不相同时,您将无法访问newWindow的document属性比赛.顺便说一句,访问页面上的iframe同样如此.

当您谈论“外部形式”时,我想您不会停留在同一个域中.其他示例(此时)检索或操作当前页面上的数据,并且不会出错.

另请参见Same origin policy.

更新:关于Delicious(et al.)小书签:其代码实际上为:

(function () {
    f = 'http://delicious.com/save?url=' + encodeURIComponent(window.location.href) + '&title=' + encodeURIComponent(document.title) + '&v=5&';
    a = function () {
        if (!window.open(f + 'noui=1&jump=doclose', 'deliciousuiv5', 'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550'))
            location.href = f + 'jump=yes'
    };
    if (/Firefox/.test(navigator.userAgent)) {
        setTimeout(a, 0)
    } else {
        a()
    }
})()

因此,是的,仅使用GET请求传输参数.

标签:bookmarklet,javascript
来源: https://codeday.me/bug/20191012/1899625.html