Javascript 在弹出窗口中显示当前URL-Safari扩展

Javascript 在弹出窗口中显示当前URL-Safari扩展,javascript,html,safari-extension,Javascript,Html,Safari Extension,我正在尝试创建一个非常基本的Safari扩展,一旦单击工具栏图标,它就会在弹出窗口中显示当前选项卡的URL 到目前为止,我有以下代码: global.html: <!doctype html> <html> <head> <script src="global.js"></script> </head> <body> </body> </html> funct

我正在尝试创建一个非常基本的Safari扩展,一旦单击工具栏图标,它就会在弹出窗口中显示当前选项卡的URL

到目前为止,我有以下代码:

global.html:

<!doctype html>
<html>
  <head>
      <script src="global.js"></script>
  </head>
  <body>
  </body>
</html>
function getCurrentURL() {
    return safari.application.activeBrowserWindow.activeTab.url;
}
<!doctype html>
<html>
  <head>
      <script src="popover.js"></script>
  </head>
  <body>
    <div class="bodyContainer" id="status"></div>
  </body>
</html>
popover.html:

<!doctype html>
<html>
  <head>
      <script src="global.js"></script>
  </head>
  <body>
  </body>
</html>
function getCurrentURL() {
    return safari.application.activeBrowserWindow.activeTab.url;
}
<!doctype html>
<html>
  <head>
      <script src="popover.js"></script>
  </head>
  <body>
    <div class="bodyContainer" id="status"></div>
  </body>
</html>
我想要的是,当我点击popover图标时,我希望popover显示“Hello world.Link is”

实际发生的情况是,当我在控制台中单击popover图标时,我看到我得到了正确的URL,但是,我得到了错误:

[Error] TypeError: null is not an object (evaluating 'body.innerHTML = "Hello world. Link is " + link')modifyBody (popover.js:9)
扩展的想法是,当我单击popover时,它需要:

  • 获取当前选项卡的URL
  • 对它做一些神奇的分析
  • 在popover.html中动态显示结果(通过DOM操作)
  • 我错过了什么

    编辑我解决了它。 我想要的预期流量是:

  • 调用
    global.js
    以捕获页面的URL
  • 等待来自
    global.js的响应
  • 收到响应后,使用URL更新
    popover.html
  • 实际发生的流程是:

  • 调用
    global.js
    以捕获页面的URL
  • 立即使用空内容调用
    modifyBody()
    (因为我们还没有收到global.js的响应)。所以这一页还是空白的
  • 终于收到了来自
    global.js
    的响应-但现在已经太晚了
  • 要解决这个问题,我有多种选择。其中两个选项是:

  • 一旦我们收到来自
    global.js的响应,请使用承诺等待更新popover.html
  • 或者,创建一个
    popoverHandler
    ,并将其添加到事件侦听器中,如下所示:

    var popoverHandler = function(event) {
        console.debug("Opening popup. Identifier");
        var currentURL = safari.extension.globalPage.contentWindow.getURL();
        // update my page.html here.
    };
    
    safari.application.addEventListener(“popover”,PopoOverHandler,true)

  • 当您单击工具栏项时,这将被称为右键;当弹出窗口显示时,这将被称为右键

    代码如下所示:

    var popoverHandler = function(event) {
        console.debug("Opening popup. Identifier");
        var currentURL = safari.extension.globalPage.contentWindow.getURL();
        // update my page.html here.
    };
    
    您还可以在
    global.js
    中注册
    “激活”
    “打开”
    “导航”
    处理程序,然后在触发这些处理程序后调用
    popover.js
    更新html函数


    希望这有帮助。

    您试图从全局页面中访问实际的页面上下文–我想Safari会阻止您这样做。您可以从条形图和弹出框访问全局页面,但不能从实际页面访问


    改为使用消息传递,请参见扩展教程中的。您需要两个简单的函数来询问URL并返回其值。

    不,不是这样。我只更新了popover.js中的popover.html,但它不起作用。我发现了这个问题,我正在编辑我的问题来添加它。好的,听起来不错。不过,您也可以使用消息传递——如果您需要同时将代码注入到实际页面中,您可能不得不这样做。谢谢你的更新。