【问题标题】:Display a new html/web page in panel在面板中显示新的 html/网页
【发布时间】:2014-12-19 05:57:59
【问题描述】:

我正在使用 addon-SDK 方法为 firefox 开发一个插件。我想知道在单击该 contentURL 中的链接时是否可以将该面板中显示的 html(contentURL) 更改为新网页。提前致谢。

【问题讨论】:

  • 您可能需要访问How to Ask 以获取有关如何改进您的问题并避免被否决的建议。
  • @Ochi 这是个好问题。 Vignesh 是的,有办法。我很久以前就这样做了,但我已经脱离了 sdk 循环,所以可能有一些 sdk 开发人员可以与您分享的推荐方式。
  • 也许这可以帮助回答您的问题:stackoverflow.com/questions/16073930/…
  • 感谢 ochi 看起来不错

标签: html firefox-addon firefox-addon-sdk


【解决方案1】:

Vignesh 这是接收点击的 url 的代码:

https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/panel#Scripting_panel_content

var myScript = "window.addEventListener('click', function(event) {" +
               "  var t = event.target;" +
               "  if (t.nodeName == 'A')" +
               "    self.port.emit('click-link', t.toString());" +
               "}, false);"

var panel = require("sdk/panel").Panel({
  contentURL: "http://www.bbc.co.uk/mobile/index.html",
  contentScript: myScript
});

panel.port.on("click-link", function(url) {
  console.log(url);
});

panel.show();

因此,您可以将其更改为代替 console.log(url),您可以使其找到您的面板并将其 iframe 位置更改为该 url。我不确定如何使用 sdk 方法做到这一点,也许其他人可以分享。不过我会尝试这样做:

panel.port.on("click-link", function(url) {
  panel.contentURL = url;
});

编辑: panel.contentURL = url 可能不起作用,所以你必须这样做:

const { getMostRecentBrowserWindow } = require('sdk/window/utils');
var aXULBrowser = getMostRecentBrowserWindow();
aXULBrowser.getElementById('ID OF YOUR PANEL, probably same as id to your widget here').getElementsByTagName('iframe').contentWindow.location = url;

【讨论】:

  • @Vignesh 如果panel.contentURL = url 不起作用,那么您可以执行我在上面添加的操作。如果您无法确定面板的 ID,请使用 DOM Insepctor 和 Elment Inspector 插件,然后 shift+右键单击您的面板,它将在检查器中打开它,然后您可以轻松查看面板 ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
相关资源
最近更新 更多