javascript - Bookmarklet、js注入(inject)和弹出问题

标签 javascript bookmarklet

我目前正在编写一个书签,通过附加新的 <script> 来加载和执行远程 js 文件。当前窗口中的标记,如下所示:

javascript:(function() {
    if(typeof __bml_main != "undefined") return __bml_main.init();
    var s= document.createElement('script');
    s.type= 'text/javascript';
    s.src= 'http://127.0.0.1:8000/media/bookmarklet.js';
    void(document.body.appendChild(s));
})();

我的书签需要执行一些 dom 操作,以便从正在查看的页面中提取数据,然后打开一个新的弹出窗口来列出它们。

问题是:如果我想绕过弹出窗口阻止程序,我无法从注入(inject)的脚本打开新窗口。我需要在书签代码中从头开始打开它,并在以后需要时访问它。

我尝试过做这样的事情:

javascript:var my_popup = window.open('http://127.0.0.1:8000/resources/manage/new/', 'newResourcePopup',config='height=200,width=400,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,directories=no,status=no');
(function() {
// script injection (...)
})();

但是如果我尝试访问 my_popup从我的远程加载脚本中,大多数浏览器都会抛出安全警告,并且不允许我访问 Window 对象。这是可以理解的,因为脚本与显示的页面不是来自同一个域,但我有点卡住了......

解决方案是使用 div 覆盖,但在这种情况下我真的更喜欢打开一个窗口。

有什么提示吗?

最佳答案

您可以将窗口的标记作为字符串加载到 bookmarklet.js 文件中,然后(稍后)使用不带 URL(或带有“about:blank”,我忘记哪个更跨浏览器兼容),并使用 my_popup.document.write 将标记写入新窗口。

您可能会发现,即使没有跨域问题,您以后也无法打开该窗口,除非您这样做是为了直接响应用户操作 - 这可能是一件好事。 :-)

关于javascript - Bookmarklet、js注入(inject)和弹出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2994187/

相关文章:

javascript - 开发小书签时需要考虑哪些设计和安全注意事项?

javascript - Highcharts 循环 JSON 对象来填充数据系列

javascript - jQuery UI 日期选择器 : onSelect called twice

php - 如何处理向服务器请求很多动态图片?

javascript - 在 Canvas 上绘制平行线

javascript - 修改约:config parameter via bookmarklet in Firefox

javascript - 创建一个不会被阻止的小书签

javascript - jQuery/javascript - 加载前获取图像大小

javascript - 在 Javascript 中查找请求 URL

html - 如何防止 Pinterest Pin It 书签链接获取 Google map 图片