简体   繁体   中英

Firefox Addon Scripting Trusted Page Content

So I'm trying to use a chrome:// URI in my add-on and I want to use a page-worker on it using the scripting trusted content method, however it seems to not work when I hard code the URI in, the chrome://<package name>/<part>/<file> ; however, it works when I use the self.data.url('filename'). I want to use the chrome:// URI is because I use a GUID instead of the email style as the add-on's ID and also I don't want to use the resource:// URI.

Content Script

addon.port.emit('hi');

HTML

<html>
   <head>
      <meta charset="UTF-8">
        <title>Gaia Utils Settings</title>
        <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
        <script type="text/javascript" src="chrome://gaiascripts/content/dropdown.min.js"></script>
        <script type="text/javascript" src="chrome://gaiascripts/content/settings.dev.js"></script>
        <script type="text/javascript" src="chrome://gaiascripts/content/test.dev.js"></script>
        <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css">
      <link href="css/settings.css" rel="stylesheet" type="text/css">
      <link href="css/poststyle.css" rel="stylesheet" type="text/css">
   </head>
   <body>
      <nav id="navbar_header" class="navbar navbar-blue navbar-static-top"></nav>
      <div id="content_wrapper" class="container">
         <div id="content_padding" class="container"></div>
      </div>
      <footer class="footer"></footer>
   </body>
</html>

main.js

var PageWorker = require("sdk/page-worker");
PageWorker.Page({
   contentURL: "chrome://gaiautils/content/settings.dev.html",
   onMessage: function(message) {
      console.log(message);
   }
});

I know I can use a page-mod and attach the scripts to it with that, but I'd rather call the scripts from within the file and be able to communicate with the main add-on code. So is there a way so that I can have my cake and eat it too - using the hard coded chrome:// URI in conjunction with calling the scripts from within the HTML file while being able to have those scripts communicate back to the main.js file?

How can I have it so that I can use the addon.port.emit() in the content scripts that are called directly in the HTML file so that I don't have to use the self.data.url('htmlFile'), because I don't want to use the resource://pageckage-GUID-at-jetpack/path/to/file

The SDK only considers pages "trusted" if the URL you're loading is part of the add-on assets ( data/ ). chrome:// URIs are not. Hence you'll need to use regular content scripts via the contentScriptFile: [...] option in your PageWorker definition.

<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script>

Don't ever load remote scripts for security reasons (and performance reasons to a far lesser extent)! Ship a local copy of jQuery if you want to use it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM